system
December 11, 2013, 3:36pm
#1
Ciao a tutti ragazzi, sono nuovo del forum, vorrei sapere una cosa se possibile,
ho una scheda arduino Mega con lcd 16x4, rtc-DS1307 e un bel sensore temperatura/umidità sht11.
il problema sussiste nella visualizzazione dei dati sull’LCD, in sequenza leggo : data (0,0), ora(0,1), temperatura (0,2) e umidità (0,3),
questi ultimi due (temp/umid) lampeggiano più velocemente in base al delay di aggiornamento dati dei sensori; mentre l’ora si aggiorna ogni 3/4 secondi!!
premessa: tutti e due gli sketch singolarmente funzionano benissimo.
spero di essermi spiegato bene, grazie in anticipo…
ciao ciao
gpb01
December 11, 2013, 3:46pm
#2
Ciao,
prima di tutto, essendo il tuo primo post, ti consiglio di presentarti QUI e di leggere il REGOLAMENTO …
Poi … se magari pubblichi il codice ci dai modo di capire qualche cosa … altrimenti … è dura tirare ad indovinare …
Cortesemente il codice racchiuso tra i TAG code … che ottieni con il bottone # (il terzultimo della seconda fila quando editi il messaggio ). Grazie
Guglielmo
system
December 11, 2013, 6:32pm
#3
ciao Guglielmo,
hai ragione , ecco qui il codice per intero.
grazie per l’aiuto…
ciao
Manuel
#include <LiquidCrystal.h>
#include <SHT1x.h>
#include <Wire.h>
#include <RTClib.h>
#define BACKLIGHT 20
#define CONTRAST 21
char buffer[10];
RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define dataPin 8
#define clockPin 9
SHT1x sht1x(dataPin, clockPin);
void setup()
{
pinMode( BACKLIGHT, OUTPUT );
pinMode( CONTRAST, OUTPUT );
digitalWrite( BACKLIGHT, HIGH );
analogWrite( CONTRAST, 40 );
Wire.begin();
RTC.begin();
lcd.begin(16, 4);
delay(millis()/1000);
}
void loop()
{
float temp_c = sht1x.readTemperatureC();
float humidity = sht1x.readHumidity();
temp_c = temp_c-3;
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(temp_c,1);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Humidity:");
lcd.print(humidity, 1);
lcd.print("%");
DateTime now = RTC.now();
lcd.clear();
sprintf(buffer, "%02d/%02d/%d", now.day(), now.month(), now.year());
lcd.setCursor(0,2);
lcd.print( buffer );
char buffer[10] = "";
sprintf(buffer, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(0,3);
lcd.print( buffer );
delay(millis()/1000);
}
gpb01
December 11, 2013, 7:23pm
#4
Bé ... comincia con lo spiegare perché fai :
delay(millis()/1000);
... che provoca un ritardo crescente ad ogni giro. Che senso ha ???
Guglielmo
system
December 11, 2013, 8:32pm
#5
opss... quella è una prova che ho trovato nel web,
ma non ha prodotto nessun beneficio a parte come spieghi tu..peggiora il tutto!!
in realtà metto :
delay(2000); //Intervallo di misura
gpb01
December 11, 2013, 9:13pm
#6
Scusa, ma che libreria stai usando per il DS1307 ??? Quella ufficiale (indicata nel Playground ) si trova QUI ...
Guglielmo
system
December 11, 2013, 9:58pm
#7
in realtà utilizzo RTClib e Wire , di seguito dichiaro il tipo di RTC utilizzato RTC_DS1307 RTC.
#include <Wire.h>
#include <RTClib.h>
#define BACKLIGHT 20
#define CONTRAST 21
char buffer[10];
RTC_DS1307 RTC;