Mettere in pausa

Devo mettere arduino in pausa quando non c’è nessun cambiamento di stato su alcune variabili.
Mi spiego meglio:
ho un sensore di temperatura, se la temperatura non cambia non deve eseguire più nulla, altrimenti esegue un’altra istruzione.
Ad esempio se la temperatura è compresa tra 20 e 30 gradi esegue una volta le istruzioni, se la temperatura continua a rimanere compresa tra 20 e 30 gradi non deve fare più nulla. Se la temperatura è compresa tra 10 e 20 gradi allora esegue le nuove istruzioni e rimane in pausa fino al prossimo cambiamento di temperatura.

if(20<temp<30)
{
 istruzioni
}
else if(10<temp<20)
{
 istruzioni
}

Spero di essermi spiegato, chiedete pure.
Grazie

con dei cicli do while all'interno delle if

@Nid : NON è quello che chiede …

… nel tuo codice, se la temperatura è stabile a 25° esegui SEMPRE quello che è nel “if(temp>20 && temp<30)” … lui vuole che, dato un intervallo, si esegua qualche cosa SOLO una volta quando ci si arriva e poi basta finché non entra in un altro intervallo (almeno così ho capito dalla sua spiegazione).

Serve un piccolo sistema a stati logici … :wink:

Guglielmo

gpb01:
@Nid : NON è quello che chiede …

… nel tuo codice, se la temperatura è stabile a 25° esegui SEMPRE quello che è nel “if(temp>20 && temp<30)” … lui vuole che, dato un intervallo, si esegua qualche cosa SOLO una volta quando ci si arriva e poi basta finché non entra in un altro intervallo (almeno così ho capito dalla sua spiegazione).

Serve un piccolo sistema a stati logici … :wink:

Guglielmo

Perfetto hai capito benissimo. E’ quello che intedevo io. Come posso fare?

Credi due variabili, una che indica lo stato attuale e una l’ultimo stato …

byte statoAttuale = 0;
byte statoPrecedente= 0;

poi nel loop(), ad esempio farai …

void loop() {
   ...
   << leggi la temperatura>>
   if (temperatura >= 10 && temperatura < 20) statoAttuale = 1;
   else if ((temperatura >= 20 && temperatura < 30) statoAttuale = 2;
   else if (temperatura >= 30 && temperatura < 40) stato Attuale = 3;
   << e così via per tutti gli intervalli che ti servono >>
   ...
   if (statoAttuale != statoPrecedente) {
      statoPrecedente = statoAttuale;
      switch (statoAttuale) {
         case 1:
            << fai le cose del primo intervallo>>
            break;
         case 2:
            << fai le cose del secondo intervallo>>
            break;
         case 3:
            << fai le cose del terzo intervallo>>
            break;
         << e così via >>
      }  // fine dello switch
   }  // fine del IF
}  // fine del loop()

… chiaro il concetto ???

Guglielmo

per essere chiari:
if(20<temp<30) non funzina in C.
Non so se lo hai usato come pseudiocode per spiegare quello che vuoi fare.
la sintassi giusta é

if ((temperatura >= 20 && temperatura < 30)

dove devi stare attento di coprire tutto il range di valori possibili. per questo il >= 20.

Ciao Uwe

uwefed:
per essere chiari:
if(20<temp<30) non funzina in C.
Non so se lo hai usato come pseudiocode per spiegare quello che vuoi fare.
la sintassi giusta é

if ((temperatura >= 20 && temperatura < 30)

dove devi stare attento di coprire tutto il range di valori possibili. per questo il >= 20.

Ciao Uwe

Lo so bene che non si può fare. Ho scritto in quella maniera solo per dare l’idea!!!

gpb01:
Credi due variabili, una che indica lo stato attuale e una l’ultimo stato …

byte statoAttuale = 0;

byte statoPrecedente= 0;




poi nel loop(), ad esempio farai ...



void loop() {
  …
  << leggi la temperatura>>
  if (temperatura >= 10 && temperatura < 20) statoAttuale = 1;
  else if ((temperatura >= 20 && temperatura < 30) statoAttuale = 2;
  else if (temperatura >= 30 && temperatura < 40) stato Attuale = 3;
   << e così via per tutti gli intervalli che ti servono >>
  …
  if (statoAttuale != statoPrecedente) {
     statoPrecedente = statoAttuale;
     switch (statoAttuale) {
        case 1:
           << fai le cose del primo intervallo>>
           break;
        case 2:
           << fai le cose del secondo intervallo>>
           break;
        case 3:
           << fai le cose del terzo intervallo>>
           break;
        << e così via >>
     }  // fine dello switch
  }  // fine del IF
}  // fine del loop()




... chiaro il concetto ???

Guglielmo

Grazie mille!!!