Arduino - Botão - Debounce
Quando um botão é pressionado/solto ou quando uma chave é acionada, os iniciantes geralmente pensam, de forma simples, que o estado dele muda de LOW para HIGH ou de HIGH para LOW. Na prática, não é exatamente assim. Por causa das características mecânicas e físicas, o estado do botão (ou da chave) pode alternar entre LOW e HIGH várias vezes. Esse fenômeno é chamado de trepidação (chattering). O fenômeno de trepidação faz com que um único pressionamento possa ser lido como vários pressionamentos, causando mau funcionamento em alguns tipos de aplicação. Este tutorial mostra como eliminar esse fenômeno (o que chamamos de fazer o debounce da entrada).

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
Se você ainda não conhece o botão (pinagem, como funciona, como programar ...), aprenda sobre ele nos seguintes tutoriais:
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Vamos ver e comparar o código Arduino SEM e COM debounce e o comportamento de cada um.
Lendo o Botão sem Debounce
Antes de aprender sobre o debounce, veja o código sem debounce e o comportamento dele.
Passos Rápidos
- Conecte o Arduino ao PC com o cabo USB
- Abra o Arduino IDE e selecione a placa e a porta corretas
- Copie o código abaixo e abra-o no Arduino IDE
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino

- Abra o Serial Monitor
- Mantenha o botão pressionado por alguns segundos e depois solte.
- Veja o resultado no Serial Monitor
⇒ Como você pode ver, você pressionou e soltou o botão apenas uma vez. No entanto, o Arduino reconhece isso como vários pressionamentos e solturas.
Lendo o Botão com Debounce
Passos Rápidos
- Copie o código abaixo e abra-o no Arduino IDE
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino
- Abra o Serial Monitor
- Mantenha o botão pressionado por alguns segundos e depois solte.
- Veja o resultado no Serial Monitor
⇒ Como você pode ver, você pressionou e soltou o botão apenas uma vez. O Arduino reconhece isso como um único pressionamento e uma única soltura. A trepidação foi eliminada.
Deixamos Tudo Simples - Código de Debounce de Botão no Arduino com Biblioteca
Para facilitar muito para os iniciantes, principalmente ao usar vários botões, criamos uma biblioteca chamada ezButton. Você pode conhecer a biblioteca ezButton aqui.
Código de Debounce de Botão no Arduino para Um Único Botão
Código de Debounce de Botão no Arduino para Vários Botões
O diagrama de ligação para o código acima:

This image is created using Fritzing. Click to enlarge image
Vídeo
Conhecimento Adicional
- O valor de DEBOUNCE_DELAY depende da aplicação. Aplicações diferentes podem usar valores diferentes.
Extensibilidade
O método de debounce também pode ser aplicado a chaves, sensores de toque ...