delay debounce

salve a tutti, ho una piccola curiosità. Usando un pulsante necessito debounce, dato che sennò (ho provato) appena lo premo pare che l'ho premuto 5 volte :cold_sweat:. ovviamente nessun problema sul codice ma mi sono accorto che mi serve mettere alla fine del codice un piccolo delay per ottimizzare ancora di più il debouce, esiste una regola generale per calibrare questo delay? è rimuovibile con l'uso di qualche millis() o cose cosi? perchè nel frattempo mi dovrebbero arrivare dati dai sensori e non vorrei fermare il codice. grazie a tutti per le risposte =)

Se per te un piccolo delay è accettabile (tipo 60 millisecondi, normalmente sufficienti) allora ti basta fare una cosa del genere :

Immaginiamo che il pin è normalmente tenuto HIGH da una resistenza di pull-up e che, a bottone premuto, vada a LOW, allora …

if (digitalRead(mioBottone) == LOW) {     // bottone premuto
   delay(60);                             // aspetti il tempo di debouncing
   if (digitalRead(mioBottone) == LOW) {  // se è ancora LOW ... il bottone è stabilmente premuto
      ...
      // qui il bottone è premuto
      ...
   }
}

Se invece anche quel piccolo delay di 60 millisecondi ti crea problemi … beh, con millis() fare certamente si fa, è sicuramente un po’ più complesso … :roll_eyes:

Guglielmo

C'è anche da dire che quando le dimensioni del codice presente nel "void loop()" cominciano a diventare importanti, il problema si rivolve da solo.

dadduni: salve a tutti, ho una piccola curiosità. Usando un pulsante necessito debounce, dato che sennò (ho provato) appena lo premo pare che l'ho premuto 5 volte :cold_sweat:. ovviamente nessun problema sul codice ma mi sono accorto che mi serve mettere alla fine del codice un piccolo delay per ottimizzare ancora di più il debouce, esiste una regola generale per calibrare questo delay? è rimuovibile con l'uso di qualche millis() o cose cosi? perchè nel frattempo mi dovrebbero arrivare dati dai sensori e non vorrei fermare il codice. grazie a tutti per le risposte =)

Dacci il codice perché mi sa che il problema sta da un altra parte. Ciao Uwe