Go Down

Topic: Aiutino su questo Sketch (Read 1 time) previous topic - next topic

ciarly64

Feb 07, 2013, 06:56 pm Last Edit: Feb 07, 2013, 07:23 pm by UweFederer Reason: 1
Premetto che sono un principiante.
Mi servirebbe una mano per aggiustare questo sketch ,  il display 20 x 4 e gira tutto bene solo che non riesco a visualizzare in sincronia data,temperatura intera, ed quella estera -
display Ok
Rtc Ok data e ora giusta
temperatura interna Ok
esterna Ok  

Code: [Select]
#include <Wire.h>
#include <RTClib.h>
#include <LCD03.h>
#include <OneWire.h>
#include <DallasTemperature.h>


//Cavo dati sia collegato a pin 2 sul Arduino
#define ONE_WIRE_BUS 2

char buffer[10];
float temperatura;


RTC_DS1307 RTC;
LCD03 lcd;
OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);


void setup () {


 Wire.begin();
 RTC.begin();
 lcd.begin(20, 4);
 sensors.begin();
 lcd.backlight();
 // lcd.print(" GESTIONE  ACQUARIO          Di           Rosiello Claudio");
 delay(5000);
 lcd.clear();



 if (! RTC.isrunning()) {
   RTC.adjust(DateTime(__DATE__, __TIME__));
 }
}

void loop () {



 DateTime now = RTC.now();
 lcd.clear();

 char buffer[10] ="";

 lcd.setCursor(0,0);
 lcd.print("ACQUARIO MARINO");

 lcd.setCursor(0,2);
 lcd.print("Int:");

 lcd.setCursor(10,2);
 lcd.print("Est:");

 lcd.setCursor(0,3);
 lcd.print("PH:0,0");

 lcd.setCursor(10,3);
 lcd.print("Luce:00%");

 sprintf  (buffer,"%02d/%02d/%d", now.day(), now.month(), now.year());
 lcd.setCursor(10,1);
 lcd.print(buffer);


 sprintf(buffer,"%02d:%02d:%02d", now.hour(), now.minute(), now.second());
 lcd.setCursor(0,1);
 lcd.print( buffer );
 //delay (1000);

 temperatura=analogRead(A0);
 lcd.setCursor(15,2);
 lcd.print((5.0 * temperatura * 100.0)/1024.0)/1000;
 //delay (1000);


 sensors.requestTemperatures(); // Invia il comando di lettura delle temperatura
 lcd.setCursor(4, 2);
 lcd.print (sensors.getTempCByIndex(0));
 delay (1000);
 lcd.clear();


 //lcd.noBacklight();
}


grazie

uwefed

Per favore spiegati meglio; cosa significa
Quote
solo che non riesco a visualizzare in sincronia data,temperatura intera, ed quella estera -

Ciao Uwe

ciarly64

#2
Feb 07, 2013, 08:03 pm Last Edit: Feb 07, 2013, 10:08 pm by UweFederer Reason: 1
Cosi come e il codice l'orologio salta tre 3 secondi per volta (delay spento)
mentre la temperatura esterna e fissa (delay spento)
l'interna lampeggia per un secondo.
(delay 1000 )
(lcd clear)

questo e il problema sincronizzare tutto in modo esatto cioé
orologio per suo conto con delay RTC DS1307
sensore esterno analogico con delay e clear  LM35A
idem sensore digitale interno DS 18b20

Code: [Select]
#include <Wire.h>
#include <RTClib.h>
#include <LCD03.h>
#include <OneWire.h>
#include <DallasTemperature.h>

//Cavo dati sia collegato a pin 2 sul Arduino
#define ONE_WIRE_BUS 2

char buffer[10];
float temperatura;

RTC_DS1307 RTC;
LCD03 lcd;
OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

void setup () {
 Wire.begin();
 RTC.begin();
 lcd.begin(20, 4);
 sensors.begin();
 lcd.backlight();
 // lcd.print(" GESTIONE  ACQUARIO          Di           Rosiello Claudio");
 delay(5000);
 lcd.clear();

 if (! RTC.isrunning()) {
   RTC.adjust(DateTime(__DATE__, __TIME__));
 }
}

void loop () {
 DateTime now = RTC.now();
 lcd.clear();

 char buffer[10] ="";

 lcd.setCursor(0,0);
 lcd.print("ACQUARIO MARINO");

 lcd.setCursor(0,2);
 lcd.print("Int:");

 lcd.setCursor(10,2);
 lcd.print("Est:");

 lcd.setCursor(0,3);
 lcd.print("PH:0,0");

 lcd.setCursor(10,3);
 lcd.print("Luce:00%");

 sprintf  (buffer,"%02d/%02d/%d", now.day(), now.month(), now.year());
 lcd.setCursor(10,1);
 lcd.print(buffer);


 sprintf(buffer,"%02d:%02d:%02d", now.hour(), now.minute(), now.second());
 lcd.setCursor(0,1);
 lcd.print( buffer );
 //delay (1000);

 temperatura=analogRead(A0);
 lcd.setCursor(15,2);
 lcd.print((5.0 * temperatura * 100.0)/1024.0)/1000;
 //delay (1000);

 sensors.requestTemperatures(); // Invia il comando di lettura delle temperatura
 lcd.setCursor(4, 2);
 lcd.print (sensors.getTempCByIndex(0));
 delay (1000);
 lcd.clear();

 //lcd.noBacklight();
}

ciao grazie

uwefed

#3
Feb 07, 2013, 10:13 pm Last Edit: Feb 07, 2013, 10:16 pm by uwefed Reason: 1
Allora vuoi aggiornare l' ora ogni secondo.
Ma i dati delle temperature con quale frequenza li vuoi aggiornare? Anche ogni secondo?

Allora controlla lasciando via tutti i delay se i secondi sono cambiati e solo in quel caso leggi i sensori e aggiorni il display.

Ciao Uwe.

ciarly64

Allora eliminando i 3 delay, l'orologio gira bene ma il sensore interno non si vede .
Se attivo solo il delay del sensore , l'orologio salta i secondi 2 per volta anche se l'orario e esatto.
Se attivo tutti i delay l'ora salta di 5 secondi
queste sono le prove fatte.
grazie

leo72

Nelle operazioni temporizzate non si usano i delay ma il conteggio del tempo con millis. Questo perché delay impone uno stop fisso ma tu hai delle altre operazioni che possono essere eseguite con tempi variabili per cui si possono avere dei tempi più lunghi di quelli previsti.

Testato

prova a sostituire i tuoi delay con il millis, basandoti sull'esempio che trovi nell'ide blink without delay.
oppure potresti usare looper di leo, cercalo e' una libreria
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

ciarly64


ciarly64


Go Up