fratt:
Tutto sto casino è nato perché io pensavo che il classico schema di debounce con resistenza e condensatore facesse già tutto da solo...
Hehe, ma non scoraggiarti, il debounce hardware va benissimo (a volte anche quello software, dipende da cosa deve fare lo sketch), e basta cambiare il tuo programmino per rilevare solo il cambio di stato da HIGH a LOW aggiungendo letteralmente un paio di righe:
#define BUTTON 7
unsigned long i = 0;
int curButton;
int prevButton = HIGH;
void setup() {
pinMode(BUTTON, INPUT);
Serial.begin(9600);
}
void loop() {
curButton = digitalRead(BUTTON);
if (curButton == LOW && prevButton == HIGH) {
Serial.println(i++);
// delay(60); // Debounce software
}
prevButton= curButton;
}
Con il debounce software basta aggiungere quel breve delay() dentro la if().
ilguargua:
Esiste, si chiama multivibratore monostabile.
Si, ma poi tu devi essere sicuro di leggerne l'uscita una sola volta nel lasso di tempo in cui questa resta HIGH, altrimenti torni al problema iniziale.
Con il codice postato all'inizio non ne verresti fuori comunque, ridurresti solo il numero di doppioni letti, oppure se leggi a cadenze leggermente inferiori rischi di perdere qualche pressione.
Oppure devi gestire il reset.
Ciò che vuoi fare in hardware sarebbe il contatore stesso. Se no, devi incrementare il contatore solo nell'istante in cui la condizione del pulsante passa da non premuto a premuto. Tale condizione è vera solo per un incremento del valore ogni volta che il pulsante viene premuto.
...ma, Claudio, tutto quello schema sinuoso vorrebbe essere un flip flop set-reset?... Il flip flop SR è una possibilità, avendo un pulsante deviatore: quando viene premuto, manda a livello alto il Set, che porta a livello alto l'uscita; solo quando il pulsante verrà lasciato si chiuderà il suo contatto di riposo, che porterà a livello alto il Reset e, quindi, a livello basso l'uscita. https://www.google.com/search?q=anti+rimbalzo+flip+flop
È un flip flop set reset con circuito di blocco del set. Non serve per il debounce, a quello ci pensa già la rete resistenze condensatore. L'uscita del flip flop (chiamata button) va alta alla pressione del pulsante, poi Arduino legge e resetta, ma se il pulsante è ancora premuto l'uscita non torna subito alta, prima bisogna rilasciarlo e poi ripremerlo. In sostanza il flip flop memorizza solo il fronte di pressione e non la pressione continua, in questo modo realizza l'edge detect.