Escludere un valore

Ho un problema con questo codice, praticamente quando rileva un valore infrarossi in un certo range, scatta il conteggio dei secondi, poi quando ri arriva il segnale mi invia il tempo tra un impulso e l'altro.

Il problema è che spesso riceve più impulsi in poco tempo e nel serial print mi mostra per esempio

0s
0s
20s
0s
0s
26s
0s
0s

come posso evitare di farmi stampare quei valori "nulli" ?

unsigned long mtime;
unsigned long time;
int start = 0;

void setup () {
  Serial.begin(9600);
}

void loop() {

    if (analogRead(A0) < 800 && start == 0)
    { // Se valore ir < 800 ed il segnale viene per la prima volta
    mtime = millis(); // tempo di inizio conteggio
    start=1;
    }
    if (analogRead(A1) < 800 && start == 1)
    { //Stop
    time = (millis() - mtime)/100;// fa la differenza e converte in centesimi di secondi
    start = 0;
    Serial.println(time, DEC);// mostra sul pc il tempo
    }
  }

metti un debounce come per i pulsanti! ...quando legge un impulso gli dici di ignorare gli altri che riceve da lì a che so...mezzo secondo, 1 secondo, l'intervallo minimo che vuoi

MMh.. non so come si fa... hai un link!?

metterei un delay(10) fra i due if

oppure prima della serial
if (time!=0)

funziona ma non come vorrei così :frowning:

Per usare il tutorial Debounce mi serve usare la funzione millis ma io millis già lo uso con un altro scopo nel mio sketch :disappointed_relieved:

millis indica solo da quanto tempo è acceso l'arduino, quindi puoi usarla anche 80000 volte che non va a interferire con altro, a meno che tu non abbia degli interrupt lunghi ma li è un'altro conto mi sà :wink: