Digital Read molto lento nel rilevare il cambio di stato

allora la prima lettura scommetto che avviene dopo 1.3 secondi e la seconda dopo 5.3 secondi :stuck_out_tongue:

arduino non è multitasking, una funzione non è un task.

ci sono 2 modi per creare un "multitask" (anche se non sarebbe corretto) su arduino:

  • l'uso della funzione millis()
  • l'uso di un timer che allo scadere scatena un interrupt che va a chiamare una funzione bloccando il processo in atto.

se pensi che la seconda sia più complicata io direi di no in quanto esiste il "leOS":
http://arduino.cc/forum/index.php/topic,111732.0.html
però non credo sia il tuo caso in quanto tu vai a richiamare determinate funzioni nel codice (insomma non vanno a eseguirsi ognuna per conto suo e poi leggi magari una variabile globale apposita ma proprio tu le chiami interrogando il risultato della funzione).

il primo metodo è il più usato, in pratica il comando millis() restituisce i millisecondi da quando il programma è partito.
è preciso in quanto si appoggia al timer0 del microcontrollore e quindi ha risoluzione di 16MHz, con dei controlli if su variabili unsigned long memorizzate puoi arrivare a oltre 50 anni di utilizzo senza che millis() vada in overflow :wink: