Consiglio su come attendere un dato da seriale

Sto creando un programma che riceve segnali da 4 pulsanti, diciamo 2 rossi e 2 neri.
In pratica arduino rimane in attesa, se viene premuto un pulsante nero e entro 1/2 secondi anche l’altro nero allora aumenta il contatore, lo stesso vale per i rossi.
Il problema ora è che non so come fare per far in modo che mentre aspetta il 2° rosso/nero, può comunque leggere i segnali dell’altro pulsante. Cioè se succede questo:
1)premo nero
2)aspetto 2° nero
3)premo rosso
4)premo secondo nero
5) aumento contatore nero
6) nel frattempo è scaduto il tempo del rosso quindi non incremento il rosso.

Avevo pensato di fare una cosa tipo:

i=0;
while(i<1500 && premuto==0)
{
premuto= Serial.read();
delay(i);
}
if(premuto==1)
{ nero++; }

Però il problema è che se in quella pausa viene premuto il rosso, arduino non lo gestisce.
Avete qualche consiglio?
Grazie, Salvatore.

Devi utilizzare la funzione "millis()". Alla pressione del tasto memorizzi il suo valore in una variabile. Alla successiva pressione calcoli per differenza il periodo di tempo trascorso, senza utilizzare while o altre soluzioni che sospendono di fatto l'esecuzione del loop.

Sembrerebbe tutto facile, ma utilizzare millis() non è proprio così intuitivo come sembra. Se vuoi che tutto funzioni devi darti una bella letta ai vari post sull'argomento.

lelebum: Sembrerebbe tutto facile, ma utilizzare millis() non è proprio così intuitivo come sembra. Se vuoi che tutto funzioni devi darti una bella letta ai vari post sull'argomento.

... magari comincia studiando QUESTO e poi QUESTO articolo.

E datti una letta anche a QUESTO.

Guglielmo

Mi metterò subito all'opera. Grazie mille ad entrambi