quell'if ad essere processato ci mette infinamente meno di un millisecondo. Quindi di fatto anche se è concettualmente sbagliato, l'errore che produci non è sostanziale.
dove aggiornando previousMillis come ultima istruzione, sicuramente hai lasciato passare del tempo, probabilmente anche nell'ordine dei millisecondi, tutto sta alla quantità e complessità di codice che viene eseguito prima.
interessante concetto,
dipende sia dal tempo che impiega il codice interno all'if, come dice federico, sia dalla precisione che a te serve.
Nei casi in cui questo crea problemi, potresti usare il leOS di leo, dovresti essere immune da questi ritardi visto che lavora su un secondo timer del micro
Testato:
interessante concetto,
dipende sia dal tempo che impiega il codice interno all'if, come dice federico, sia dalla precisione che a te serve.
Io ho gia' risolto il problema.
Basta modificare il codice in:
previousMillis = previousMillis + interval;
Funziona con qualsiasi velocita' del micro...
Funziona indipendentemente dalla quantita' di codice...
Oltre ad essere concettualmente la soluzione giusta.
Ecco un esempio :
Il sottostante codice sballa di 1 o 2 ms su un Arduino UNO cloccato a 16MHz.
Da notare che il Serial.print l' ho messo dopo, per non indurre altri ritardi !
(guardare con il serial monitor l' effettivo delay)
Testato:
interessante concetto,
dipende sia dal tempo che impiega il codice interno all'if, come dice federico, sia dalla precisione che a te serve.
Io ho gia' risolto il problema.
Basta modificare il codice in:
previousMillis = previousMillis + interval;
Funziona con qualsiasi velocita' del micro...
Funziona indipendentemente dalla quantita' di codice...
Oltre ad essere concettualmente la soluzione giusta.
per dire una cattiveria: Il millis() viene aggiornato ogni millisecondo. Percui posso avere un errore fino a 0,999mS. Siccuramente questo no é preciso e percui non ammissibile
In poche parole: @acik devi valutare la necessitá di precisone che devi ottenere. Se un LED lampeggia con 1 Hz oppure con 1,001 Hz a nessuno frega qualcosa e nessuno si accorge.
Se hai necessitá di tempi piú precisi Ti consiglio di usare i timer del ATmega.