Elimina il rimbalzo di un pulsante
Fa parte della sezione Ingressi del percorso Arduino di Coddy. Lezione 6 di 22.
Il pulsante di questa lezione è un pulsante vero e proprio e il codice iniziale è il tuo contatore della lezione precedente. Avvialo e premi il pulsante una volta: il conteggio aumenta di più di uno.
All'interno di un pulsante, due contatti metallici si toccano. Quando si incontrano, rimbalzano: per circa un millisecondo si toccano, si separano come molle e si toccano di nuovo. Rilasciarlo produce lo stesso effetto. loop() legge il pin molte volte durante quel millisecondo e conta ogni rimbalzo come una pressione.
La soluzione si chiama eliminazione dei rimbalzi: quando la lettura cambia, agisci una volta sola, poi attendi circa 20 ms affinché i contatti si stabilizzino prima di leggere di nuovo. Una persona non si accorge mai di 20 ms.
if (reading != lastReading) {
if (reading == LOW) {
presses++;
Serial.println(presses);
}
delay(20);
}
lastReading = reading;Attendi dopo ogni cambiamento, non solo dopo una pressione: anche il rilascio rimbalza e ogni rimbalzo durante il rilascio sembra una nuova pressione.
Sfida
MedioCorreggi il contatore in modo che ogni pressione venga conteggiata una sola volta:
- quando
readingè diverso dalastReading, conteggialo se si tratta di una pressione (LOW), poi attendi 20 ms - continua a salvare
lastReadingalla fine diloop()
Premi Run, premi il pulsante alcune volte e osserva il conteggio, poi premi Check.
Provalo tu
const int buttonPin = 2;
int presses = 0;
int lastReading = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading == LOW && lastReading == HIGH) {
presses++;
Serial.println(presses);
}
lastReading = reading;
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Ingressi
1Pulsanti
Stampa lo stato di un pulsanteResistenza pull-downPull-up internoAlterna a ogni pressioneConta le pressioni del pulsanteElimina il rimbalzo di un pulsanteDue pulsanti contemporaneamenteEsercitati da solo: Playground Arduino