ciao, ho provato a migliorare un po il codice che gestisce l'irrigazione automatica. adesso ho implementato il sensore pioggia con la variabile start_irrigazione (uguale a 2 se è disattivato il sensore dal menù del display, a 1 se è attivato dal menù e il contatto è chiuso e a 0 se il sensore è aperto), poi sulla gestione degli orari ho usato i >= e <= per gestire l'intervallo tra i 2 tempi, così se metto OFF da menù, poi riportando in ON continua il ciclo(come uno stato di pausa). vorrei avere 1 o 2 secondi di riposo tra l'irrigazione da una zona all' altra, avevo messo un delay di 1 secondo ma, non so perchè, mi rallentava l'uso del menù.ho provato con il millis() tra una zona e l'altra con il codice così composto: dopo il digitalWrite (ev_zona1,LOW) avevo messo
ritardo=millis()+2000;
if(ritardo<millis() && ritardo>0) {
ora_irri2=ora;
minuti_irri2=now.minute(); }
ma non funziona, l'idea era quelladi ritardare la lettura dell'ora di 2 secondi e quindi la seconda zona dovrebbe essere partita 2 secondi dopo ma purtroppo non è così. avrei bisogno di un consiglio su questo passaggio. ciao e grazie
if(start_irrigazione==1 || start_irrigazione==2) {
if((ora>=ora_start_irri && now.minute()>=minuti_start_irri) && (ora<=ora_stop_irri1 && now.minute()<=minuti_stop_irri1))
{
if(tempo_irri1 !=0) {
digitalWrite(ev_zona1,HIGH);
stato_ciclo=1;
stato_sosta=1;
}
else {
digitalWrite(ev_zona1,LOW);
stato_ciclo=10;
}
}
if((stato_ciclo==1 || stato_ciclo==10) && now.minute()==minuti_stop_irri1) {
digitalWrite(ev_zona1,LOW);
stato_ciclo=0;
stato_sosta=0;
ora_irri2=ora;
minuti_irri2=now.minute();
}
if((ora>=ora_irri2 && now.minute()>=minuti_irri2) && (ora<=ora_stop_irri2 && now.minute()<=minuti_stop_irri2)) {
if(tempo_irri2 !=0) {
digitalWrite(ev_zona2,HIGH);
stato_ciclo=2;
stato_sosta=2;
}
else {
digitalWrite(ev_zona2,LOW);
stato_ciclo=11;
}
}
if((stato_ciclo==2 || stato_ciclo==11) && now.minute()==minuti_stop_irri2) {
digitalWrite(ev_zona2,LOW);
ora_irri3=ora;
minuti_irri3=now.minute();
stato_ciclo=0;
stato_sosta=0;
}
if((ora>=ora_irri3 && now.minute()>=minuti_irri3) && (ora<=ora_stop_irri3 && now.minute()<=minuti_stop_irri3)) {
if(tempo_irri3 !=0) {
digitalWrite(ev_zona3,HIGH);
stato_ciclo=3;
stato_fermata=0;
}
else {
digitalWrite(ev_zona3,LOW);
stato_ciclo=12;
}
}
if((stato_ciclo==3 || stato_ciclo==12)&& now.minute()==minuti_stop_irri3) {
digitalWrite(ev_zona3,LOW);
ora_irri4=now.hour();
minuti_irri4=now.minute();
stato_ciclo=0;
stato_sosta=0;
}
if(now.hour()==ora_irri4 && now.minute()==minuti_irri4) {
if(tempo_irri4 !=0) {
digitalWrite(ev_zona4,HIGH);
stato_ciclo=4;
stato_sosta=0;
stato_fermata=0;
}
else {
digitalWrite(ev_zona4,LOW);
stato_ciclo=13;
}
}
if((stato_ciclo==4 || stato_ciclo==13) && now.minute()==minuti_stop_irri4) {
digitalWrite(ev_zona4,LOW);
ora_irri5=now.hour();
minuti_irri5=now.minute();
stato_ciclo=0;
stato_sosta=0;
}
switch(stato_sosta) {
case 1:
if(stato_canc_grande==1 || stato_canc_piccolo==1) {
stato_fermata=1;
minuti_fermata=now.minute();
secondi_fermata=now.second();
}
if(stato_fermata==1) {
digitalWrite(ev_zona1,LOW);
}
if(stato_ciclo==1 && now.minute() >= minuti_fermata + 2 && now.second()==secondi_fermata) {
digitalWrite(ev_zona1,HIGH);
minuti_fermata=0;
stato_fermata=0;
}
break;
case 2:
if(stato_canc_grande==1 || stato_canc_piccolo==1) {
stato_fermata=1;
minuti_fermata=now.minute();
secondi_fermata=now.second();
}
if(stato_fermata==1) {
digitalWrite(ev_zona2,LOW);
}
if(stato_ciclo==2 && now.minute() >= minuti_fermata + 2 && now.second()==secondi_fermata) {
digitalWrite(ev_zona2,HIGH);
minuti_fermata=0;
stato_fermata=0;
}
break;
}
}
if(start_irrigazione==0) {
digitalWrite(ev_zona1,LOW);
digitalWrite(ev_zona2,LOW);
digitalWrite(ev_zona3,LOW);
digitalWrite(ev_zona3,LOW);
stato_irrigazione=6;
}
}