Arduino Nano - Botão - Debounce
Quando um botão é pressionado ou solto, ou um interruptor é acionado, os iniciantes costumam supor que o estado muda de LOW para HIGH ou de HIGH para LOW. Na realidade, nem sempre é assim. Devido às características mecânicas e físicas, o estado do botão (ou interruptor) pode alternar rapidamente entre LOW e HIGH várias vezes em resposta a um único evento. Esse fenômeno é conhecido como chattering (trepidação). O chattering pode fazer com que um único acionamento seja lido como vários, causando mau funcionamento em certas aplicações.

O método para eliminar esse problema é chamado de debouncing ou debounce. Este tutorial ensina como fazer isso ao usar o botão com o Arduino Nano. Vamos aprender pelos passos abaixo:
- Código do Arduino Nano sem debounce de botão.
- Código do Arduino Nano com debounce de botão.
- Código do Arduino Nano com debounce de botão usando a biblioteca ezButton.
- Código do Arduino Nano com debounce para vários botões.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
Se você não está familiarizado com botões (pinagem, funcionamento, programação etc.), os tutoriais a seguir podem ajudar:
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Vamos observar e comparar o código do Arduino Nano COM e SEM debounce, bem como o comportamento de cada um.
Lendo o Botão sem Debounce
Antes de mergulhar no conceito de debouncing, dê uma olhada no código sem debouncing e observe o comportamento dele.
Passos Rápidos
- Conecte um cabo USB ao Arduino Nano e ao seu PC.
- Abra a Arduino IDE e escolha a placa e a porta corretas.
- Copie o código abaixo e abra-o na Arduino IDE.
- Clique no botão Upload na Arduino IDE para compilar e carregar o código na placa Arduino Nano.

- Abra o Serial Monitor.
- Pressione e segure o botão por alguns segundos e depois solte-o.
- Tente várias vezes.
- Confira o resultado no Serial Monitor.
Às vezes, você pressionou e soltou o botão apenas uma vez. Mesmo assim, o Arduino Nano interpreta isso como vários pressionamentos e liberações. Esse é o fenômeno de chattering mencionado no início do tutorial. Vamos ver como corrigi-lo na próxima parte.
Lendo o Botão com Debounce
O código abaixo aplica o método chamado debounce para evitar o fenômeno de chattering.
Passos Rápidos
- Copie o código acima e abra-o com a Arduino IDE.
- Clique no botão Upload na Arduino IDE para compilar e carregar o código no Arduino Nano.
- Abra o Serial Monitor.
- Continue pressionando o botão por alguns segundos e depois solte-o.
- Confira o resultado no Serial Monitor.
Como você pode observar, você pressionou e soltou o botão apenas uma vez. O Arduino Nano detecta isso como um único pressionamento e uma única liberação. O ruído foi eliminado.
Fizemos Isso Ficar Simples - Código de Debounce de Botão para Arduino Nano com Biblioteca
Criamos uma biblioteca, a ezButton, para facilitar a vida de quem está começando, principalmente ao lidar com vários botões. Você pode saber mais sobre a biblioteca ezButton aqui.
Código de Debounce de Botão para Arduino Nano com Um Único Botão
Código de Debounce de Botão para Arduino Nano com Vários Botões
O esquema para o código acima: A ilustração da ligação para o código:. A representação visual da ligação para o código:

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
Vídeo
Conhecimento Adicional
- O valor de DEBOUNCE_DELAY varia conforme as características físicas de cada botão. É possível que botões diferentes usem valores diferentes.
Extensibilidade
A técnica de debounce pode ser usada com um interruptor, um sensor de toque e mais.