Display 7 segmenti via BCD

Datman:

if(millis()-t1 > TEMPO) {t1=millis(); digitalWrite(LED,!digitalRead(LED));}

In questo modo comunque trascorso TEMPO+δ, dove δ è un ritardo casuale incontrollabile di pochi (o molti) ms rispetto al momento ideale esatto dello scadere di TEMPO, si riparte dal valore attuale di millis() contando un altro TEMPO+δ.

Se non si vuole continuare ad accumulare l'errore δ ad ogni scadere di TEMPO basta aggiornare t1 dell'esatto valore TEMPO, così la differenza millis()-t1 parte già da un certo valore corrispondente all'ultimo ritardo casuale δ:

if(millis()-t1 >= TEMPO) {t1+=TEMPO; digitalWrite(LED,!digitalRead(LED));}

Qui rappresentato graficamente con due ritardi esagerati segnati in giallo:

Se invece non interessa l'esatta periodicità dei tempi, allora questa finezza si può ignorare.