Arduino - Botão
O botão é um componente básico e muito usado em vários projetos com Arduino. Ele não é tão simples quanto parece (por causa de suas características mecânicas e físicas). Iniciantes podem ter muitos problemas com ele. Este tutorial deixa tudo mais fácil para os iniciantes. Vamos começar!
※ Nota:
Antes de falar sobre o botão, gostaríamos de avisar que há dois erros comuns que os iniciantes costumam cometer:
- O problema da entrada flutuante:
- Sintoma: Ao conectar um botão a um pino de entrada do Arduino, o estado do pino de entrada fica aleatório e não corresponde ao estado de pressionamento do botão.
- Causa: O pino do botão NÃO usa um resistor de pull-down nem um resistor de pull-up.
- Solução: ⇒ Use um resistor de pull-down ou de pull-up no pino de entrada. Os detalhes serão explicados mais adiante neste tutorial.
- Sintoma: O código no Arduino lê o estado do botão e identifica o evento de pressionamento detectando a mudança de estado (HIGH para LOW, ou LOW para HIGH). Quando o botão é pressionado de fato apenas uma vez, o código do Arduino detecta vários pressionamentos em vez de um só.
- Causa: Devido às características mecânicas e físicas, quando você pressiona o botão uma única vez, o estado do pino de entrada alterna rapidamente entre LOW e HIGH várias vezes, em vez de uma só
- Solução: ⇒ Debounce. Os detalhes serão explicados no tutorial Arduino - Botão - Debounce.
O fenômeno de trepidação causa mau funcionamento apenas em alguns tipos de aplicação que precisam detectar exatamente o número de pressionamentos. Em outros tipos de aplicação, ele é inofensivo.
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
O botão de pressão, também chamado de pushbutton, botão tátil ou chave momentânea, é um tipo de chave que fecha quando o botão é pressionado e mantido, e abre quando é solto. Existem vários tipos de botões de pressão, divididos de forma geral em dois grupos:
- Botões de pressão para montagem em PCB (que podem ser montados na protoboard)
- Botões de pressão para montagem em painel

Pinagem
Os botões para montagem em PCB geralmente têm quatro pinos.

No entanto, esses pinos são conectados internamente em pares. Por isso, precisamos usar apenas dois dos quatro pinos, que NÃO estejam conectados internamente.
Há quatro formas (na verdade duas, por causa da simetria) de conectar o botão (veja a imagem)

⇒ Para que ele fique firme na PCB (placa) e resista à força do pressionamento.
Os botões para montagem em painel geralmente têm dois pinos.

O módulo de botão de pressão tem um resistor de pull-down embutido, que garante que a saída fique em 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 NÃO está conectado ao pino B
- Quando o botão está pressionado, o pino A está conectado ao pino B

Arduino - Botão
Um pino do botão é conectado ao VCC ou ao GND. O outro pino é conectado a um pino do Arduino.
Lendo o estado do pino do Arduino (configurado como pino de entrada), podemos detectar se o botão está pressionado ou NÃO.
Estado do Botão e Estado de Pressionamento
A relação entre o estado do botão e o estado de pressionamento depende de como conectamos o botão ao Arduino e da configuração do pino do Arduino.
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
- Se o botão estiver pressionado, o estado do pino do Arduino é HIGH. Caso contrário, o estado do pino do Arduino é LOW
- Nós PRECISAMOS usar um resistor externo.
- Se o botão estiver pressionado, o estado do pino do Arduino é LOW. Caso contrário, o estado do pino do Arduino é HIGH
- Podemos usar um resistor interno ou externo. O resistor interno já vem dentro do Arduino, basta configurá-lo pelo código do Arduino.
※ Nota:
Se NÃO usarmos nem resistor de pull-down nem de 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 uma detecção errada.
- A pior prática: inicializar o pino do Arduino como entrada (usando pinMode(BUTTON_PIN, INPUT)) e NÃO usar nenhum resistor externo de pull-down/pull-up.
- A melhor prática: inicializar o pino do Arduino como entrada com pull-up interno (usando pinMode(BUTTON_PIN, INPUT_PULLUP)). Assim, NÃO é preciso usar nenhum resistor externo de pull-down/pull-up.
Para facilitar para os iniciantes, este tutorial usa o método mais simples: inicializar o pino do Arduino como entrada com pull-up interno, sem usar resistor externo. Os iniciantes NÃO precisam se preocupar com a ligação do resistor de pull-up/pull-down. Basta usar o código do Arduino.
Diagrama de Ligação
- Diagrama de ligação entre o Arduino 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 e o botão para montagem em painel

This image is created using Fritzing. Click to enlarge image

Como Programar o Botão
- Inicialize o pino do Arduino como entrada com pull-up interno usando a função pinMode(). Por exemplo, o pino 7:
- Leia o estado do pino do Arduino usando a função digitalRead().
※ Nota:
Há dois casos de uso muito comuns:
- O primeiro: se o estado da entrada for HIGH, faça algo. Se o estado da entrada for LOW, faça o contrário.
- O segundo: se o estado da entrada mudar de LOW para HIGH (ou de HIGH para LOW), faça algo.
Dependendo da aplicação, escolhemos um deles. Por exemplo, ao usar um botão para controlar um LED:
- Se quisermos que o LED fique LIGADO quando o botão estiver pressionado e DESLIGADO quando o botão NÃO estiver pressionado, DEVEMOS usar o primeiro caso de uso.
- Se quisermos que o LED alterne entre LIGADO e DESLIGADO 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 Arduino
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
- Pressione e solte o botão várias vezes
- Veja o resultado no Serial Monitor:
1 é HIGH, 0 é LOW.
Explicação do Código
Leia a explicação linha por linha nas linhas de comentário do código!
Modificando o Código Arduino
Vamos modificar o código para detectar os eventos de pressionar e soltar
Passos Rápidos
- Modifique o código como abaixo
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino

- Abra o Serial Monitor
- Pressione o botão e depois solte
- Veja o resultado no Serial Monitor
※ Nota:
- Mesmo que você tenha pressionado e soltado o botão apenas uma vez, a saída no Serial Monitor pode mostrar vários eventos de pressionar e soltar. Esse é o comportamento normal do botão. Esse comportamento é chamado de “fenômeno de trepidação”. Você pode saber mais no tutorial Arduino - Debounce de Botão.
- 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.
- Use pinMode(BUTTON_PIN, INPUT) para o módulo de botão. Ele envia LOW quando não está pressionado e HIGH quando está pressionado.
Vídeo
Desafie-se
- Acenda o LED quando o botão estiver pressionado e apague o LED quando o botão NÃO estiver pressionado.
- Alterne o LED entre LIGADO e DESLIGADO cada vez que o botão for pressionado.
Conhecimento Adicional
- Se o sensor tem os estados fechado (conectado ao VCC ou ao GND) ou aberto (NÃO conectado a nada), você precisa de um resistor de pull-up ou pull-down para transformar esses estados em dois estados: LOW e HIGH. Por exemplo: botão de pressão, chave, chave de contato magnético (sensor de porta)...
- Se o sensor tem dois níveis de tensão definidos (LOW e HIGH), você NÃO precisa de um resistor de pull-up ou pull-down. Por exemplo: sensor de movimento, sensor de toque ...