domix1684:
Grazie Pippo72 per la risposta,
pero' la tua affermazione va in contrasto con quanto detto prima da Claudio_FF e cioè:
Assolutamnete no !
Tu assegni a "tempo" il valore di millis() solo quando viene premuto il tasto (per cominciare a contare il periodo da quel momento), NON durante la fase di conteggio o di incremento (... con le conseguenze che avevi prima).
Claudio_FF:
Il blink degli esempi non tiene conto dell'accumulo dell'errore.... insignificante per l'esempio stesso, errato se si vuole un periodo preciso.
Si è già detto tutto.
Di millis() bisogna sapere solo DUE cose
il tempo trascorso si calcola con millis()-tempoiniziale
se si vuole creare un processo periodico, a tempoiniziale va sommato il periodo e NON va impostato al valore attuale di millis()
Basta, solo queste, e non c'è più da parlare né di overflow, né di errori accumulati ogni ciclo, né di reset di millis o calcoli vari.
Fatto ciò rimane solo l'imprecisione dell'oscillatore, e per questa, oltre ad un intervento hardware, allora può stare bene anche una piccola calibrazione a tentativi (ma cambiando scheda va rifatta).
mah .... tempo fa avevo pure l imprecisione dell "orologio",,,,,
ora che il quarzo (vero e di marca) e infinitamente più preciso di quel "coso" che viene messo sugli arduino di adesso, questo e fuori discussione.
comunque si può sempre sistemare la faccenda di modificare "interval" senza modificare lo sketch, tutte le volte,
avevo risolto con
interval = 990+lettura di una memoria (valore da 1 a 20)
modificando il valore della memoria (senza pc e senza modificare lo sketc) mi ritrovavo con il clock a un secondo che non perdeva/aumentava quasi niente per ore