Semaforo Complesso OK-Flip Flop Semplice ( e non ci salto fuori).

Visto che il paragone di guardare l'orologio è bello mi permetto di continuare.

Cosa si fa quando si vuole fare qualcosa tra quattro ore?

  1. Si guarda l'orologio
  2. Ci si annota da qualche parte l'ora
  3. 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).

orologiomillis.png

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:

  1. si guarda il valore di millis() nel momento da cui vogliamo iniziare a misurare il tempo
  2. lo si annota in una variabile
  3. 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** **