Arduino UNO R4 - Botão
O botão é um componente simples, mas importante, usado em muitos projetos com Arduino UNO R4. Ele pode parecer complicado por causa de suas propriedades mecânicas e físicas, o que pode ser um desafio para iniciantes. Este tutorial foi feito para ajudar iniciantes a entendê-lo com facilidade. Vamos começar!

※ Nota:
Antes de aprendermos a usar o botão com o Arduino Uno R4, queremos destacar dois erros comuns que os iniciantes costumam encontrar:
- O problema da entrada flutuante:
- Sintoma: Quando um botão é conectado a um pino de entrada do Arduino UNO R4, o estado do pino de entrada é imprevisível e não reflete o estado do botão.
- Causa: O pino do botão não está conectado a um resistor pull-down ou pull-up.
- Solução: Conecte um resistor pull-down ou pull-up ao pino de entrada. Mais detalhes serão dados adiante neste tutorial.
- Sintoma: O código do Arduino UNO R4 lê o estado do botão e tenta identificar os eventos de pressionamento detectando mudanças de estado (de HIGH para LOW, ou de LOW para HIGH). No entanto, quando o botão é pressionado apenas uma vez, o Arduino Uno R4 pode detectar vários pressionamentos.
- Causa: As propriedades mecânicas fazem o estado do pino de entrada alternar rapidamente entre LOW e HIGH várias vezes com apenas um pressionamento.
- Solução: Implemente o debounce. Mais detalhes estarão no tutorial Arduino UNO R4 - Botão - Debounce.
O chattering afeta apenas aplicações que exigem uma contagem precisa dos pressionamentos do botão. Em outras aplicações, ele pode não ser um problema.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V4 IoT Starter Kit (Arduino included) | |
| 1 | × | DIYables STEM V4B IoT Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Botão
O botão de pressão, também conhecido como botão tátil ou chave momentânea, é uma chave que fecha quando você a pressiona e a mantém pressionada, e abre quando você a solta. Os botões de pressão vêm em diferentes tipos, divididos principalmente em dois grupos:
- Botões de pressão para montagem em PCB (podem ser usados em uma protoboard)
- Botões de pressão para montagem em painel

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

Esses pinos são conectados entre si internamente em pares, então só precisamos usar dois dos quatro pinos que não estão conectados entre si internamente.
Existem quatro maneiras, mas na verdade duas, pois são parecidas, de conectar o botão (veja a imagem).

Um botão tem quatro pinos, mas por que usamos apenas dois? ⇒ Isso serve para mantê-lo estável na PCB (placa) e suportar a pressão.
Os botões para montagem em painel geralmente têm dois pinos.

O módulo de botão de pressão inclui um resistor 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.
- Quando o botão está pressionado, o pino A e o pino B estão conectados.

Arduino UNO R4 - Botão
Um pino do botão é conectado ao VCC ou ao GND, e o outro pino é conectado a um pino do Arduino UNO R4.
Podemos determinar se o botão está pressionado ou não verificando o estado de um pino do Arduino UNO R4 configurado como entrada.
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 UNO R4 e das configurações do pino do Arduino UNO R4.
Existem duas maneiras de usar um botão com o Arduino UNO R4:
- Conecte um pino do botão ao VCC e o outro a um pino do Arduino UNO R4 com um resistor pull-down.
- Quando o botão é pressionado, o estado do pino do Arduino UNO R4 é HIGH. Caso contrário, o estado do pino do Arduino UNO R4 é LOW.
- Você DEVE usar um resistor externo.
- Quando o botão é pressionado, o estado do pino do Arduino UNO R4 é LOW. Caso contrário, o estado do pino do Arduino UNO R4 é HIGH.
- Você pode usar um resistor interno ou externo. O resistor interno já vem embutido no Arduino UNO R4 e pode ser ativado pelo código Arduino.
※ Nota:
Se não usarmos um resistor pull-down ou pull-up, o pino de entrada fica "flutuante" quando o botão não está pressionado. Isso significa que o estado do pino pode mudar de forma imprevisível para HIGH ou LOW, causando leituras incorretas.
- A pior prática: Configurar o pino do Arduino UNO R4 como entrada usando pinMode(BUTTON_PIN, INPUT) sem nenhum resistor pull-down ou pull-up.
- A melhor prática: Configurar o pino do Arduino UNO R4 com um resistor pull-up interno usando pinMode(BUTTON_PIN, INPUT_PULLUP). Isso não exige um resistor externo.
Para facilitar a vida dos iniciantes, este tutorial usa o método mais simples: configurar o pino do Arduino UNO R4 como entrada com pull-up interno, sem precisar de um resistor externo. Os iniciantes não precisam se preocupar em conectar o resistor pull-up ou pull-down. Basta usar o código Arduino fornecido.
Diagrama de Ligação
- Diagrama de ligação do Arduino UNO R4 e do botão para montagem em PCB

This image is created using Fritzing. Click to enlarge image
- Diagrama de ligação do Arduino UNO R4 e do botão para montagem em painel

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.
Como Programar para o Botão
- Configura o pino 7 do Arduino UNO R4 como entrada com pull-up interno usando a função pinMode().
- Usa a função digitalRead() para verificar o estado do pino do Arduino UNO R4.
※ Nota:
Existem dois casos de uso comuns:
- O primeiro: Quando a entrada é HIGH, executar uma ação. Quando a entrada é LOW, executar a ação oposta.
- O segundo: Quando a entrada muda de LOW para HIGH (ou de HIGH para LOW), executar uma ação.
De acordo com o objetivo, escolhemos uma dessas opções. Por exemplo, ao usar um botão para controlar um LED:
- Se precisamos que o LED LIGUE quando o botão é pressionado e DESLIGUE quando ele não está pressionado, devemos escolher o primeiro cenário.
- Se queremos que o LED alterne entre LIGADO e DESLIGADO a cada vez que o botão é pressionado, devemos optar pelo segundo cenário.
Código Arduino UNO R4 - Lendo o estado do botão
Passos Rápidos
Siga estas instruções passo a passo:
- Se esta é a primeira vez que você usa o Arduino UNO R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para o Arduino UNO R4 WiFi/Minima na Arduino IDE.
- Conecte o botão ao Arduino UNO R4 de acordo com o diagrama fornecido.
- Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
- Copie o código acima e abra-o na Arduino IDE
- Clique no botão Upload na Arduino IDE para enviar o código ao seu Arduino UNO R4.

- Abra o Serial Monitor.
- Pressione e solte o botão várias vezes.
- Confira o resultado no Serial Monitor.
1 significa LIGADO, 0 significa DESLIGADO.
Explicação do Código
A explicação está na seção de comentários do código Arduino acima.
Código Arduino UNO R4 - Detectando o evento de pressionar e soltar o botão
Vamos alterar o código para reconhecer quando os botões são pressionados e soltos.
Passos Rápidos
- Copie o código acima e cole-o na Arduino IDE
- Clique no botão Upload na Arduino IDE para enviar o código ao Arduino UNO R4.
- Abra o Serial Monitor.
- Pressione e solte o botão.
- Confira o resultado no Serial Monitor.
※ Nota:
- Mesmo que você pressione e solte o botão apenas uma vez, o Serial Monitor pode mostrar vários eventos de pressionar e soltar. Esse comportamento comum é conhecido como "fenômeno de chattering". Você encontra mais detalhes no tutorial Arduino UNO R4 - Debounce de Botão.
- Para simplificar o processo para iniciantes que usam vários botões, desenvolvemos uma biblioteca chamada ezButton. Você pode saber mais sobre a biblioteca ezButton aqui.
- Se você estiver usando o módulo de botão, configure o pino no modo de entrada usando pinMode(BUTTON_PIN, INPUT). Nessa configuração, o módulo envia LOW quando o botão não está pressionado e HIGH quando o botão está pressionado.