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!

Botão com Arduino UNO R4

※ Nota:

Antes de aprendermos a usar o botão com o Arduino Uno R4, queremos destacar dois erros comuns que os iniciantes costumam encontrar:

  1. 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.
  • O fenômeno de chattering (trepidação):
    • 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.

    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
    Botão de pressão com Arduino UNO R4

    Pinagem

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

    Pinagem do Botão

    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).

    Como Usar o Botão

    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.

    Pinagem do botão de pressão de dois pinos
    image source: diyables.io

    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.
    Como o Botão Funciona

    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:

    1. 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.
  • Conecte um pino do botão ao GND e o outro a um pino do Arduino UNO R4 com um resistor pull-up.
    • 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
    Diagrama de Ligação do Botão com Arduino UNO R4

    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
    Diagrama de Ligação do botão de pressão de dois pinos com Arduino UNO R4

    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().
    pinMode(7, INPUT_PULLUP);
    • Usa a função digitalRead() para verificar o estado do pino do Arduino UNO R4.
    int button_state = digitalRead(BUTTON_PIN);

    ※ 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

    #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); delay(500); }

    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.
    Arduino IDE - Como Fazer Upload do Código
    • Abra o Serial Monitor.
    • Pressione e solte o botão várias vezes.
    • Confira o resultado no Serial Monitor.
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno R4 WiFi
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
    New Line
    9600 baud
    1 1 1 0 0 0 0 0 0 1 1 1
    Ln 11, Col 1
    Arduino Uno R4 WiFi on COM15
    2

    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.

    /* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-button */ #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button int button_state; // the current state of button int prev_button_state = LOW; // the previous state of button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the last state prev_button_state = button_state; }

    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.
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno R4 WiFi
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
    New Line
    9600 baud
    The button is pressed The button is released
    Ln 11, Col 1
    Arduino Uno R4 WiFi on COM15
    2

    ※ 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.

    Vídeo

    ※ NOSSAS MENSAGENS

    • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!