Visto che il paragone di guardare l'orologio è bello mi permetto di continuare.
Cosa si fa quando si vuole fare qualcosa tra quattro ore?
- Si guarda l'orologio
- Ci si annota da qualche parte l'ora
- Di tanto in tanto si guarda di nuovo l'orologio per vedere quanto tempo è trascorso
Come si fa a calcolare il tempo trascorso?
Calcolando:
** **ora_attuale meno ora_di_inizio_salvata_prima** **
.
Vediamo la figura seguente (cerchio di sinistra): supponiamo ad un certo momento di voler fare qualcosa tra quattro ore, guardiamo l'ora, sono le 5, ce la scriviamo da qualche parte. Continuiamo a guardare periodicamente l'orologio. Alle 9 scopriamo che sono passate 4 ore (9-5=4).
Ma cosa succede se passa la mezzanotte (cioè il famoso e temuto overflow di millis) ?
Assolutamente niente! Contando circolarmente con numeri interi senza segno il risultato viene sempre giusto. Nel cerchio di destra il tempo iniziale sono le 10. Ci interessa sapere quando sono passate 5 ore. Questo avviene alle 3 (3-10=5)
Su Arduino è la stessa cosa:
- si guarda il valore di millis() nel momento da cui vogliamo iniziare a misurare il tempo
- lo si annota in una variabile
- si controlla periodicamente il valore raggiunto da millis() per vedere se è trascorso un certo tempo
L'unica differenza è che millis() conta da 0 a 4294967295 invece che da 0 a 11, quindi serve una variabile di tipo unsigned long per salvare il tempo di inizio.
Poi periodicamente si calcola quanto tempo è trascorso con:
** ** millis() - tempoInizio** **