Preciosione al centesimo di secondo millis()

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).

Guglielmo

... mettendo tutto il ciclo di conteggio in un'if che lo esegue solo se l'interruttore e' chiuso ? ... :wink:

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

  1. il tempo trascorso si calcola con millis()-tempoiniziale

  2. 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

Ragazzi, volevo dirvi che grazie al vostro prezioso aiuto oggi ho risolto la questione. :slight_smile: :slight_smile: :slight_smile:

Vi ringrazio tantissimo!!!