Eliminar o bouncing de um botão
Parte da seção Entradas do Journey de Arduino da Coddy. Lição 6 de 22.
O botão desta lição é um botão de verdade, e o código inicial é o seu contador da lição anterior. Execute-o e pressione o botão uma vez: a contagem aumenta mais de uma unidade.
Dentro de um botão, dois contatos metálicos se encostam. Quando se encontram, eles quicam: por cerca de um milissegundo, se tocam, se afastam como uma mola e se tocam novamente. Soltar o botão causa o mesmo efeito. loop() lê o pino várias vezes nesse milissegundo e conta cada quique como um pressionamento.
A solução é chamada de debouncing: quando a leitura muda, aja uma vez com base nela e, em seguida, espere cerca de 20 ms para os contatos se estabilizarem antes de ler novamente. Uma pessoa nunca percebe 20 ms.
if (reading != lastReading) {
if (reading == LOW) {
presses++;
Serial.println(presses);
}
delay(20);
}
lastReading = reading;Espere após cada mudança, não apenas após um pressionamento: ao soltar, os contatos também quicam, e cada quique ao voltar parece um novo pressionamento.
Desafio
MédioCorrija o contador para que cada pressionamento seja contado uma vez:
- quando
readingfor diferente delastReading, conte se for um pressionamento (LOW) e, em seguida, aguarde 20 ms - continue salvando
lastReadingno final deloop()
Pressione Run, pressione o botão algumas vezes e observe a contagem; em seguida, Check.
Experimente você mesmo
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;
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Entradas
1Botões
Exibir o estado de um botãoResistor pull-downPull-up internoAlternar a cada pressionamentoContar pressionamentos do botãoEliminar o bouncing de um botãoDois botões ao mesmo tempoPratique por conta própria: Playground de Arduino