Automazione Tende antipioggia

grazie Steve!!!! veramente gentile! grazie per i preziosi consigli!!! :slight_smile:

questo il codice con l'implementazione della temperatura, tutto ok mi entra nell'if in caso di varizione delle 3 variabili...

//--------------   tenda da abbassare GRANDE ---------------------
   // se sole o vento forte abbasso la tenda
   if ((misurazione < 600 || Rotations > 28 || temperatura >= 31.3 ) && !attivaz_chiusuraGRANDE && reset_timerGRANDE == false) {
     attivaz_chiusuraGRANDE = true ;         // evita nuova chiusura fino a che non sono riaperte
     srotolaTendeGRANDE = true;               // imposto flag srotolamento in corso
     inizioSvolgiTendaGRANDE = millis();       // memorizzo istate inizio operazione
     svolgiTendeGRANDE();                    // lancio comando srotolamento tende
   }

chiedo poi, se posso, se la parte di codice sotto è corretta.... quello che succede è che dopo che le tende si sono chiuse perchè la temperatura è maggiore di 31.3(codice sopra) , la tenda si ferma,attende il tempo del timeout impostato e si richiude nuovamente e da queto momento riparte di nuovo il timeout... e solo dopo la seconda richiusura tutto funziona come da programma, ovvero se la temperatura scende sotto i 28.1 la tenda si riapre...

purtoppo pensavo di aver risolto, ma il problema si è ripresentato....

se tolgo il controllo della temperatura tutto funziona egregiamente... :frowning:

// -------------- tenda da alzare GRANDE ---------------
   //se poco sole e tenda srotolata
   if (temperatura < 28.1 && !attivaz_aperturaGRANDE ) {
     if (misurazione > 900) {
if ((millis() - startingTimeGRANDE) < TIMEOUTGRANDE) {
   if (Rotations > 28){
     attivaz_chiusuraGRANDE = true ;
   }
     }
       
     // se c'è poco vento, sono passati almeno 10 minuti e non ci sono state folate tiro su le tende
       if ( Rotations < 18 && ((millis() - startingTimeGRANDE) > TIMEOUTGRANDE) && !superamento_velocitaGRANDE) {
         attivaz_aperturaGRANDE = true ;       // impedisco doppio comando
         arrotolaTendeGRANDE = true;           // flag partenza avvolgitura
         inizioSvolgiTendaGRANDE = millis();   // uso stessa variabile per memoria partenza operazione
         avvolgiTendeGRANDE();                 // comando avvolgimento
      }
   }

}