Sbarazzati di cicli e ritardi.

Come sbarazzarsi del ciclo e renderlo asincrono in modo che non blocchi l'esecuzione? Molto semplice: il ciclo viene sostituito con un contatore e una condizione. Supponiamo di avere un ciclo for che stampa il valore di un contatore:
for (int i = 0; i < 10; i++) 
     Serial.println(i); 

Per sbarazzarci del ciclo, dobbiamo creare la nostra variabile globale, mettere tutto in loop() e aumentare in modo indipendente la variabile e controllare la condizione:
int counter = 0; 
void loop() 
     Serial.println(counter); 
     counter++; 
     if (counter >= 10) counter = 0; 
}
Ma cosa succede se ci fosse un delay() nel ciclo? Ecco un esempio:
for (int i = 0; i < 30; i++) 
     Serial.println(i);
     delay(100); 
}
Sbarazzati di loop e delay(). Introduciamo un timer per millis() e lavoriamoci sopra:
int counter = 0; // variabile di sostituzione
uint32_t timer = 0; // variabile timer
#define T_PERIOD 100 // periodo di commutazione 
void loop() 
     if (millis() - timer >= T_PERIOD) // timer su millis()
   
         timer = millis(); // ripristina.  
         counter++; // aggiungi. 
         if (counter > 30) counter = 0; // cambia in un cerchio continuo.
     } 
}
Invece della variabile di ciclo i, ora abbiamo il nostro contatore globale counter, che va da 0 a 30 (in questo esempio) con un periodo di 100 ms.
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia