Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Como Implementar Debounce em Botões Usando Arduino

O conceito de debounce é fundamental quando se trabalha com botões em circuitos eletrônicos, especialmente ao usar plataformas como o Arduino. Quando um botão é pressionado, ele não gera um único sinal limpo, mas sim uma série de sinais de alta frequência devido ao contato mecânico. Isso pode causar leituras erradas no microcontrolador, como múltiplas detecções de um único pressionamento. O debounce é a técnica usada para filtrar esses sinais indesejados.

Existem duas abordagens principais para implementar debounce: hardware e software. Neste artigo, vamos focar na implementação via software, que é bastante comum em projetos com Arduino.

Exemplo Prático: Implementação de Debounce em Arduino

Vamos criar um exemplo simples onde um LED é controlado por um botão com debounce implementado via software.

Componentes Necessários:

  • 1 x Arduino Uno
  • 1 x LED
  • 1 x Resistor de 220Ω
  • 1 x Botão
  • 1 x Resistor de 10kΩ
  • Jumpers

Circuito:

  1. Conecte o LED ao pino digital 13 do Arduino através de um resistor de 220Ω.
  2. Conecte o botão a um dos pinos digitais do Arduino, por exemplo, o pino 2. Use um resistor de 10kΩ como pull-down para garantir que o pino leia LOW quando o botão não está pressionado.

Código Arduino:

const int buttonPin = 2;    // Pino onde o botão está conectado
const int ledPin = 13;      // Pino onde o LED está conectado

int buttonState;            // Estado atual do botão
int lastButtonState = LOW;  // Estado anterior do botão
int ledState = LOW;         // Estado do LED

unsigned long lastDebounceTime = 0;  // Tempo do último debounce
unsigned long debounceDelay = 50;    // Tempo de debounce (50 ms)

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;

      if (buttonState == HIGH) {
        ledState = !ledState;
      }
    }
  }

  digitalWrite(ledPin, ledState);

  lastButtonState = reading;
}

Explicação do Código:

  • buttonPin e ledPin definem os pinos para o botão e o LED, respectivamente.
  • buttonState mantém o estado atual do botão, enquanto lastButtonState mantém o estado anterior.
  • ledState controla se o LED está ligado ou desligado.
  • lastDebounceTime e debounceDelay são usados para implementar o atraso de debounce.
  • No loop(), o estado do botão é lido e comparado com o estado anterior. Se houver uma mudança, o tempo é registrado.
  • Se o tempo desde a última mudança for maior que debounceDelay, o estado do botão é atualizado, e o LED é alternado se o botão estiver pressionado.

To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.