Terza opzione per azzerare il timer.

Perfezioniamo il secondo timer: puoi calcolare quanti periodi servono per "aggiornare" la variabile timer. Ad esempio in questo modo:
#define MY_PERIOD 500 // periodo in ms
uint32_t timer1; // variabile
void setup() 
{
}
void loop() 
     uint32_t timerLeft = millis() - timer1; 
     if (timerLeft >= MY_PERIOD) 
     { 
          timer1 += MY_PERIOD * (timerLeft / MY_PERIOD); 
           // eseguire l'azione
     }
}
  • Qui calcola in anticipo il tempo trascorso dall'ultima operazione e lo scrive nella variabile timerLeft, perché sarà ancora necessario. Alla variabile timer aggiungiamo il periodo moltiplicato per il numero di overflow. Se la chiamata timer non è stata saltata, verrà moltiplicata per 1.
  • La divisione intera (timerLeft / MY_PERIOD) ti consente di ottenere un numero intero di overflow, quindi le parentesi sono esattamente questo.
  • Questa costruzione del timer consente di osservare rigorosamente il periodo di esecuzione e non teme le chiamate perse, ma richiede calcoli aggiuntivi, inclusa la "costosa" divisione.

Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia