questo è un pezzo di schetc del mio banco prova per i vari componenti
unsigned long Tempo_Ora_Data_Temperatura1=0;
byte Anno=0;
//variabili per loop RTC
#include <Wire.h>
#include "DS3231.h"
RTClib RTC;
//variabili per loop TEMPERATURA
#include <dht11.h>
dht11 DHT;//specifico il sensore(libreria)
const byte DHT11_PIN (29);//costante che definisce il pin del sensore(libreria)
byte dht;//variabile per istanza per leggere il sensore(libreria)
byte Temperatura=0;//variabile per la lettura del sensore
byte TemperaturaMedia=0;//variabile per la conferma di lettura del sensore
byte Umidita=0;//variabile per la lettura del sensore
byte UmiditaMedia=0;//variabile per la conferma di lettura del sensore
boolean LettureDHT=0;//variabile per la conferma per le scritture
unsigned long TimeDHT=0;//variabile per cronometro
unsigned long TimeDHTmedia=0;//variabile per cronometro
void LCD_RTC()
{
DateTime now = RTC.now();
Serial.println(now.unixtime()-now.unixtime()+1);
Serial.println(now.unixtime()-1521882050);
delay(1000);
}
//FUNZIONE PER VISUALIZZARE L'ORARIO ( Personalizzato )
void LCD_ORA()
{
//Istanza per leggere il RTC(libreria)
DateTime now = RTC.now();
//Posiziona il cursore
lcd.setCursor(0,0);
//Scrivi sul Display
lcd.print("Ora ");
//SE il nuovo valore è minore o uguale a 9 scrivi sul Display
if(now.hour()<=9)
{
lcd.print("0");
lcd.print(now.hour(),DEC);
lcd.print(":");
}
//SE il nuovo valore è maggiore o uguale a 10 scrivi sul Display
if(now.hour()>=10)
{
lcd.print(now.hour(),DEC);
lcd.print(":");
}
//SE il nuovo valore è minore o uguale a 9 scrivi sul Display
if(now.minute()<=9)
{
lcd.print("0");
lcd.print(now.minute(),DEC);
lcd.print(":");
}
//SE il nuovo valore è maggiore o uguale a 10 scrivi sul Display
if(now.minute()>=10)
{
lcd.print(now.minute(),DEC);
lcd.print(":");
}
//SE il nuovo valore è minore o uguale a 9 scrivi sul Display
if(now.second()<=9)
{
lcd.print("0");
lcd.print(now.second(),DEC);
}
//SE il nuovo valore è maggiore o uguale a 10 scrivi sul Display
if(now.second()>=10)
{
lcd.print(now.second(),DEC);
}
}
//FUNZIONE PER VISUALIZZARE LA DATA ( Personalizzato )
void LCD_DATA()
{
//Istanza per leggere il RTC(libreria)
DateTime now = RTC.now();
//Posiziona il cursore
lcd.setCursor(0,1);
//Scrivi sul Display
lcd.print("Data ");
//SE il nuovo valore è minore o uguale a 9 scrivi sul Display
if(now.day()<=9)
{
lcd.print("0");
lcd.print(now.day());
lcd.print("/");
}
//SE il nuovo valore è maggiore o uguale a 10 scrivi sul Display
if(now.day()>=10)
{
lcd.print(now.day());
lcd.print("/");
}
//SE il nuovo valore è minore o uguale a 9 scrivi sul Display
if(now.month()<=9)
{
lcd.print("0");
lcd.print(now.month());
lcd.print("/");
}
//SE il nuovo valore è maggiore o uguale a 10 scrivi sul Display
if(now.month()>=10)
{
lcd.print(now.month());
lcd.print("/");
}
//Scrivi sul Display
lcd.print(now.year());
}
//FUNZIONE PER VISUALIZZARE TEMPERATURA E UMIDITA' ( Personalizzato )
void LCD_TEMPERATURA() // LETTURA SENSORE DHT11
{
//Istanza per leggere il DHT11(libreria)
dht = DHT.read(DHT11_PIN);
// Se questo cronometro raggiunge il tempo impostato
if(millis()-TimeDHT>=1000)
{
//Queste Variabili assumono il valore del sensore
Temperatura=(DHT.temperature);
Umidita=(DHT.humidity);
//AZZERA questo cronometro
TimeDHT=millis();
}
//SE le variabili NON sono confermate
if((Temperatura!=TemperaturaMedia)||(Umidita!=UmiditaMedia))
{
//SE questo cronometro raggiunge il tempo impostato
if(millis()-TimeDHTmedia>=500)
{
//Queste Variabili di conferma assumono il valore del sensore
TemperaturaMedia=(DHT.temperature);
UmiditaMedia=(DHT.humidity);
//AZZERA questo cronometro
TimeDHTmedia=millis();
//Uso Operatore ternario al posto di IF ed ELSE ( Solo per ricordarmi che esiste )
//SE le variabili SONO confermate la Variabile di LetturaDHT è valida
Temperatura==TemperaturaMedia && Umidita==UmiditaMedia?LettureDHT=1:LettureDHT=0;
}
}
//SE la lettura è valida posiziona il cursore e scrivi sul Display
if(LettureDHT==1)
{
lcd.setCursor(0,0);
lcd.print(" Gradi ");
lcd.print(TemperaturaMedia);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print(" Umidita' ");
lcd.print(UmiditaMedia);
lcd.print(" % ");
}
}
//FUNZIONE CHE UNISCE LE FUNZIONI PRECEDENTI E PERFEZIONA LA VISUALIZZAZIONE ( Personalizzato )
void LCD_ORARIO_TEMPERATURA()
{
delay(10);
//Se questo cronometro raggiunge il tempo impostato
//pulisci LCD e fai partire le Funzioni
if(millis()-Tempo_Ora_Data_Temperatura1>=5000)
{
lcd.clear();
LCD_ORA();
LCD_DATA();
//Se lo STESSO cronometro raggiunge il tempo impostato
//pulisci LCD e fai partire le Funzioni
if(millis()-Tempo_Ora_Data_Temperatura1>=10000)
{
lcd.clear();
LCD_TEMPERATURA();
//AZZERA questo cronometro
Tempo_Ora_Data_Temperatura1=millis();
}
}
}
ecco un piccolo esempio ovviamente manca il setup.
![]()
ed anche altre parti tipo il loop.
è solo per darti un idea di cosa stai affrontando.