Impianto d'Irrigazione Interrato gestito da Arduino

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. :smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp:
ed anche altre parti tipo il loop.

è solo per darti un idea di cosa stai affrontando.