Problema controllo irrigazione giardino

salve a tutti in questo mese mi sono messo a costruire una centralina composta da arduino uno, una relè shield da 4 e un modulo rtc, 4 pulsanti per avere un irrigazione manuale e quattro led di stato vi allego il codice:

 #include <Wire.h>
#include <RTClib.h>

#define pinSettore1 5
#define pinSettore2 6
#define pinSettore3 7
#define pinSettore4 8
#define pulsante1 9
#define pulsante2 10
#define pulsante3 2
#define pulsante4 3
#define led1 11
#define led2 12
#define led3 13
#define led4 4
int settore1[] = {20,00,20,04};
int settore2[] = {20,05,20,10};
int settore3[] = {20,11,20,15};
int settore4[] = {20,16,20,20};

RTC_DS1307 RTC;

void setup() {
 Serial.begin(9600);
 Serial.println( "START" );

 Wire.begin();
 RTC.begin();

 pinMode( pinSettore1,OUTPUT );
 pinMode( pinSettore2,OUTPUT );
 pinMode( pinSettore3,OUTPUT );
 pinMode( pinSettore4,OUTPUT );
 pinMode( pulsante1, INPUT_PULLUP );
 pinMode( pulsante2, INPUT_PULLUP );
 pinMode( pulsante3, INPUT_PULLUP );
 pinMode( pulsante4, INPUT_PULLUP );
 pinMode( led1 ,OUTPUT );
 pinMode( led2 ,OUTPUT );
 pinMode( led3 ,OUTPUT );
 pinMode( led4 ,OUTPUT );
 
 if (! RTC.isrunning()) {
   Serial.println("RTC is NOT running!");
   RTC.adjust(DateTime(__DATE__, __TIME__));
 }

 digitalWrite( pinSettore1,LOW );
 digitalWrite( pinSettore2,LOW );
 digitalWrite( pinSettore3,LOW );
 digitalWrite( led1,LOW );
 digitalWrite( led2,LOW );
 digitalWrite( led3,LOW );
 digitalWrite( led4,LOW );
    

}
void Manuale() {
digitalRead(pulsante1);
digitalRead(pulsante2);
digitalRead(pulsante3);
digitalRead(pulsante4);

if(pulsante1 == HIGH){
   digitalWrite(led2,LOW);
   digitalWrite(led3,LOW);
   digitalWrite(led4,LOW);
   digitalWrite(pinSettore2,LOW);
   digitalWrite(pinSettore3,LOW);
   digitalWrite(pinSettore4,LOW);
   digitalWrite(pinSettore1,HIGH);
   digitalWrite(led1,HIGH);
   digitalRead(pulsante2);
   delay(180000);
   digitalWrite(pinSettore1,LOW);
   digitalWrite(led1,LOW);
}
 
 if(pulsante2 == HIGH){
 digitalWrite(led1,LOW);
   digitalWrite(led3,LOW);
   digitalWrite(led4,LOW);
   digitalWrite(pinSettore1,LOW);
   digitalWrite(pinSettore3,LOW);
   digitalWrite(pinSettore4,LOW);
   digitalWrite(pinSettore2,HIGH);
   digitalWrite(led2,HIGH);
   delay(180000);    
   digitalWrite(pinSettore2,LOW);
   digitalWrite(led2,LOW);
 }
 if(pulsante3 == HIGH){
   digitalWrite(led2,LOW);
   digitalWrite(led1,LOW);
   digitalWrite(led4,LOW);
   digitalWrite(pinSettore2,LOW);
   digitalWrite(pinSettore1,LOW);
   digitalWrite(pinSettore4,LOW);
   digitalWrite(pinSettore3,HIGH);
   digitalWrite(led3,HIGH);
   delay(180000);
   digitalWrite(pinSettore3,LOW);
   digitalWrite(led3,LOW);
 }
 if(pulsante4 == HIGH){
   digitalWrite(led2,LOW);
   digitalWrite(led3,LOW);
   digitalWrite(led1,LOW);
   digitalWrite(pinSettore2,LOW);
   digitalWrite(pinSettore3,LOW);
   digitalWrite(pinSettore1,LOW);
   digitalWrite(pinSettore4,HIGH);
   digitalWrite(led4,HIGH);
   delay(180000);
   digitalWrite(pinSettore4,LOW);
   digitalWrite(led4,LOW);
 }
}


void loop() {
 if ( RTC.isrunning()) {
   DateTime now = RTC.now();

   Serial.print(now.year(), DEC);
   Serial.print('/');
   Serial.print(now.month(), DEC);
   Serial.print('/');
   Serial.print(now.day(), DEC);
   Serial.print(' ');
   Serial.print(now.hour(), DEC);
   Serial.print(':');
   Serial.print(now.minute(), DEC);
   Serial.print(':');
   Serial.print(now.second(), DEC);
   Serial.println();

   int _hour   = now.hour();
   int _minute = now.minute();

   // Settore Uno
   if ( settore1[0] <= _hour && _hour <= settore1[2] && settore1[1] <= _minute && _minute <= settore1[3] ) {
     digitalWrite( pinSettore1,HIGH );
     digitalWrite(led1,HIGH);
     Manuale();
   } else { digitalWrite( pinSettore1,LOW );
   digitalWrite(led1,LOW);
   Manuale();}

   // Settore Due
   if ( settore2[0] <= _hour && _hour <= settore2[2] && settore2[1] <= _minute && _minute <= settore2[3] ) {
     digitalWrite( pinSettore2,HIGH );
     digitalWrite(led2,HIGH);
     Manuale();
   } else { digitalWrite( pinSettore2,LOW );
   digitalWrite(led2,LOW);
   Manuale();}

   // Settore Tre
   if ( settore3[0] <= _hour && _hour <= settore3[2] && settore3[1] <= _minute && _minute <= settore3[3] ) {
     digitalWrite( pinSettore3,HIGH );
     digitalWrite(led3,HIGH);
     Manuale();
   } else { digitalWrite( pinSettore3,LOW );
   digitalWrite(led3,LOW);
   Manuale();}

   // Settore Quattro
   if ( settore4[0] <= _hour && _hour <= settore4[2] && settore4[1] <= _minute && _minute <= settore4[3] ) {
     digitalWrite( pinSettore4,HIGH );
     digitalWrite(led4,HIGH);
     Manuale();
   } else { digitalWrite( pinSettore4,LOW );
   digitalWrite(led4,LOW);
   Manuale();}
 }
 }

Funziona tutto a parte la parte dei pulsanti e dei led sapete dirmi che errori ho fatto?

Prima di tutto, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO

… dopo di che, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Grazie,

Guglielmo

visto che la hai fatto la presentazione ti do un primo indizio, con questo comando "digitalRead(pulsante1);" leggi si lo stato del pulsante ma non lo salvi da nessuna parte, devi associare quello che leggi ad una variabile o usarlo direttamente nell'if successivo.

Esempio

statopulsante1 = digitalRead(pulsante1);

if (statopulsante1) { ecc. }

oppure

if (digitalRead(pulsante1)) { ecc. ecc. }

Pero', anche cosi, se lo molli, alla prima lettura statopulsante1 cambia di nuovo ... ;)

Quello che deve fare e' prima di tutto leggere i pulsanti con un sistema che riconosca se il pulsante e' ancora premuto o se e' stato rilasciato, e poi usare delle variabili dove lui memorizza gli stati ...

Etemenanki: Pero', anche cosi, se lo molli, alla prima lettura statopulsante1 cambia di nuovo ... ;)

il mio era solo un banale esempio di come leggere lo stato di un pulsante visto che lo stava facendo nel modo sbagliato, poi il "divertimento" di come gestire il tutto era compito suo, ammetto che dopo aver visto quell'errore non ho nemmeno guardato il resto del codice per vedere cosa dovrebbe fare :)