Arduino Nano - Botão
Este tutorial ensina como usar o Arduino Nano com um botão. Em detalhes, vamos aprender:
- Como conectar o botão ao Arduino Nano
- Como programar o Arduino Nano para ler o estado do botão
- Como programar o Arduino Nano para detectar os eventos de pressionar e soltar do botão.
- Como evitar o problema de entrada flutuante ao usar o botão com o Arduino Nano.
- Como evitar o problema de chattering (trepidação) ao usar o botão com o Arduino Nano.
O botão também é chamado de botão de pressão, botão tátil ou interruptor momentâneo. É um componente fundamental e usado com frequência em projetos Arduino. É simples de usar. No entanto, pode ser confuso para iniciantes por causa de aspectos mecânicos e físicos e das várias formas de usá-lo. Este tutorial facilita as coisas para iniciantes.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
Iniciantes costumam encontrar duas dificuldades comuns ao usar um botão:
1. Problema de entrada flutuante:.
- Sintoma: O valor lido no pino de entrada não corresponde ao estado de pressionado do botão.
- Causa: O pino de entrada não está usando um resistor de pull-up ou pull-down.
- Solução: Use um resistor de pull-up ou pull-down; os passos para isso serão explicados neste tutorial.
2. Fenômeno de chattering (trepidação):.
- Sintoma: Embora o botão seja pressionado apenas uma vez, o código do Arduino detecta vários acionamentos.
- Causa: Problemas mecânicos e físicos fazem o estado do botão (ou interruptor) alternar rapidamente entre LOW e HIGH várias vezes.
- Solução: Para resolver esse problema, as técnicas de debounce serão abordadas no tutorial Arduino Nano- Botão - Debounce
Somente aplicações que exigem detecção precisa do número de acionamentos precisam levar isso em consideração.
※ Nota:
Não confunda o botão com os seguintes componentes:
Pinagem do Botão
O botão de pressão, também chamado de pushbutton, botão tátil ou interruptor momentâneo, é um tipo de interruptor que fecha quando o botão é pressionado e mantido, e abre quando é solto. Existem vários tipos de botões de pressão, que podem ser divididos em dois grandes grupos:
- Botão de pressão para montagem em PCB (adequado para montar em uma protoboard)
- Botão de pressão para montagem em painel

Um botão para montagem em PCB normalmente tem quatro pinos.

No entanto, esses pinos são ligados entre si em pares. Por isso, apenas dois dos quatro pinos precisam ser usados, aqueles que não estão conectados internamente.
Há quatro formas possíveis de conectar o botão, duas delas simétricas (como visto na imagem).

? Por que apenas dois pinos de um botão são utilizados, se ele tem quatro?
⇒ Para garantir que ele fique bem fixado na PCB (placa de circuito impresso) e suporte qualquer força de pressionamento.
Um botão para montagem em painel geralmente tem dois pinos.

O módulo de botão de pressão inclui um resistor de pull-down embutido, que garante que a saída permaneça LOW quando o botão não está pressionado. Ele tem três pinos:
- GND: Conecte este pino ao terra.
- VCC: Conecte este pino a uma fonte de alimentação de 5V ou 3.3V.
- OUT: Conecte este pino a uma entrada digital do seu Arduino.
Com essa configuração, o módulo envia LOW quando o botão não está pressionado e envia HIGH quando o botão está pressionado.
Como Funciona
- Quando o botão não está pressionado, o pino A e o pino B não estão conectados.
- No entanto, quando o botão é pressionado, o pino A e o pino B ficam conectados.

Arduino Nano - Botão
Um pino do botão é conectado ao VCC ou ao GND. O outro pino do mesmo botão é conectado a um pino de uma placa Arduino Nano. Examinando o estado de um pino do Arduino Nano configurado como entrada, podemos determinar se um botão foi pressionado ou não.
Estado do Botão e Estado de Pressionamento
A conexão entre o botão e o Arduino Nano, assim como a configuração do pino do Arduino, determinará a relação entre o estado do botão e o estado de pressionamento.
Há duas formas de usar um botão com o Arduino:
- Um pino do botão é conectado ao VCC, e o outro é conectado a um pino do Arduino com um resistor de pull-down
- Quando o botão é pressionado, o estado do pino do Arduino será HIGH. Caso contrário, será LOW
- Neste caso, é necessário um resistor externo.
- Quando o botão é pressionado, o estado do pino do Arduino será LOW. Caso contrário, será HIGH
- Podemos usar um resistor interno ou externo. O resistor interno já vem embutido no Arduino Nano e pode ser configurado pelo código do Arduino Nano.
※ Nota:
- Se NÃO usarmos nenhum resistor externo de pull-down/pull-up, o estado do pino de entrada fica “flutuante” quando o botão NÃO está pressionado. Isso significa que o estado pode ser HIGH ou LOW (instável, não fixo), resultando em detecção incorreta.
- A pior prática: Inicializar o pino do Arduino como entrada (pinMode(BUTTON_PIN, INPUT)) sem usar nenhum resistor externo de pull-down ou pull-up.
- A melhor prática: inicializar o pino do Arduino como entrada com pull-up interno (usando pinMode(BUTTON_PIN, INPUT_PULLUP)). Ela NÃO precisa de nenhum resistor externo de pull-down/pull-up.
Para simplificar a vida de quem está começando, este tutorial usa a abordagem mais direta: inicializar o pino do Arduino Nano como entrada com pull-up interno, sem precisar de um resistor externo. Os iniciantes não precisam se preocupar com a forma de conectar o resistor de pull-up/pull-down. Basta usar o código do Arduino Nano.
Diagrama de Ligação
- Diagrama de Ligação entre o Arduino Nano e o botão para montagem em PCB

This image is created using Fritzing. Click to enlarge image
- Diagrama de Ligação entre o Arduino Nano e o botão para montagem em painel

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
Como Programar o Botão
- Use a função pinMode() para configurar o pino do Arduino Nano como entrada com pull-up interno.
- Por exemplo, o pino 2:
- Use a função digitalRead() para verificar o estado do pino do Arduino Nano.
※ Nota:
Existem dois casos de uso comuns:
- O primeiro: Se o estado da entrada for HIGH, execute uma ação. Se o estado da entrada for LOW, execute a ação oposta.
- O segundo: Se o estado da entrada mudar de LOW para HIGH (ou de HIGH para LOW), faça algo.
Escolhemos um deles de acordo com a aplicação. Por exemplo, ao usar um botão para controlar um LED:
- Se queremos que o LED fique LIGADO quando o botão está pressionado e DESLIGADO quando o botão NÃO está pressionado, DEVEMOS usar o primeiro caso de uso.
- Se queremos que o LED alterne entre LIGADO e DESLIGADO a cada vez que pressionamos o botão, DEVEMOS usar o segundo caso de uso.
Como detectar a mudança de estado de LOW para HIGH
Código do Arduino Nano
Passos Rápidos
- Conecte seu Arduino Nano a um computador usando um cabo USB.
- Abra a Arduino IDE e selecione a placa e a porta corretas.
- Copie o código abaixo e abra-o na Arduino IDE.
- Clique no botão Upload da Arduino IDE para compilar e carregar o código no Arduino Nano.

- Abra o Serial Monitor.
- Pressione e solte o botão várias vezes.
- Confira os resultados exibidos no Serial Monitor.
1 é HIGH, 0 é LOW.
Explicação do Código
Confira a explicação linha por linha contida nos comentários do código-fonte!
Modificando o Código do Arduino Nano
Vamos modificar o código para que ele reconheça os eventos de pressionar e soltar.
Passos Rápidos
- Modifique o código da seguinte forma:
- Clique no botão Upload da Arduino IDE para compilar e carregar o código na placa Arduino Nano.

- Abra o Serial Monitor.
- Pressione o botão e mantenha-o pressionado.
- Solte o botão e observe o resultado no Serial Monitor.
※ Nota:
- Mesmo que você pressione e solte o botão apenas uma vez, a saída no Serial Monitor pode exibir vários eventos de pressionado e solto. Esse é o comportamento típico do botão e é conhecido como "fenômeno de chattering". Para resolver esse problema, consulte o tutorial Arduino Nano - Debounce de Botão.
- Desenvolvemos uma biblioteca, a ezButton, para simplificar o processo para quem está começando, principalmente ao lidar com vários botões. Você pode saber mais sobre a biblioteca ezButton aqui.
- Para o módulo de botão, configure o pino com pinMode(BUTTON_PIN, INPUT). O módulo envia LOW quando não está pressionado e HIGH quando está pressionado.
Vídeo
Desafie-se
- Quando o botão for pressionado, o LED será aceso.
- Quando o botão não estiver pressionado, o LED será apagado.
- A cada vez que o botão for pressionado, o LED alternará entre LIGADO e DESLIGADO.
Conhecimento Adicional
Quais são as ocasiões em que é apropriado usar um resistor de pull-down/pull-up em um pino de entrada? Quais são as ocasiões em que não é adequado usar um resistor de pull-down/pull-up em um pino de entrada?
- Se o sensor tem estados fechado ou aberto, é necessário um resistor de pull-up ou pull-down para fazê-los se tornarem LOW e HIGH. Exemplos desses sensores incluem botão de pressão, interruptor e chave de contato magnético (sensor de porta).
- Por outro lado, se o sensor tem dois níveis de tensão definidos (LOW e HIGH), nenhum resistor de pull-up ou pull-down é necessário. Exemplos desses sensores são o sensor de movimento e o sensor de toque.