Problemi tra ds1307 e sht11

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

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 … :roll_eyes:

Cortesemente il codice racchiuso tra i TAG code … che ottieni con il bottone # (il terzultimo della seconda fila quando editi il messaggio). Grazie :slight_smile:

Guglielmo

ciao Guglielmo,
hai ragione :stuck_out_tongue_closed_eyes:, 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);
}

Bé ... comincia con lo spiegare perché fai :

delay(millis()/1000);

... che provoca un ritardo crescente ad ogni giro. Che senso ha ??? :astonished:

Guglielmo

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

Scusa, ma che libreria stai usando per il DS1307 ??? Quella ufficiale (indicata nel Playground) si trova QUI ...

Guglielmo

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;