Classe de botão para Arduino

Programação

Aqui está um exemplo de uma classe em Arduino que lê um botão com debounce.

class Button {
  private:
    int buttonPin;
    int debounceDelay;
    int buttonState;
    int lastButtonState;
    long lastDebounceTime;
  
  public:
    Button(int pin, int delay) {
      buttonPin = pin;
      debounceDelay = delay;
      pinMode(buttonPin, INPUT_PULLUP);
    }
  
    bool isPressed() {
      int reading = digitalRead(buttonPin);
      if (reading != lastButtonState) {
        lastDebounceTime = millis();
      }
      if ((millis() - lastDebounceTime) > debounceDelay) {
        if (reading != buttonState) {
          buttonState = reading;
          if (buttonState == LOW) {
            return true;
          }
        }
      }
      lastButtonState = reading;
      return false;
    }
};

Este código cria uma classe chamada "Button" que pode ser usada para ler um botão conectado a um pino específico com debounce. A classe tem três variáveis ​​de instância privadas: buttonPin, debounceDelay e buttonState, lastButtonState e lastDebounceTime. O construtor da classe é usado para inicializar essas variáveis, definindo o pino do botão e o tempo de debounce.

A função isPressed() é usada para ler o estado do botão. Ele verifica se houve alguma mudança no estado do botão e, se sim, armazena o tempo atual. Se o tempo desde a última mudança de estado for maior que o tempo de debounce, o estado atual do botão é armazenado e se o botão estiver pressionado, a função retorna true, caso contrário retorna false.


Aqui está um exemplo de como você poderia chamar a classe "Button" dentro de um programa Arduino:


#include <Button.h> 

Button myButton(2, 50); // cria um objeto da classe Button no pino 2 e com delay de 50ms

void setup() {
  // configuração inicial
}

void loop() {
  if (myButton.isPressed()) {
    // faça algo quando o botão for pressionado
  }
}

Neste exemplo, estamos criando um objeto da classe "Button" chamado "myButton" no pino 2 e com delay de 50ms. Isso significa que o botão está conectado ao pino 2 e o tempo de debounce é de 50 milissegundos.


Na função loop() estamos verificando se o botão foi pressionado chamando a função isPressed(). Caso seja pressionado, as instruções dentro do if serão executadas.


Lembrando que é importante incluir o arquivo de cabeçalho da classe "#include " no início do arquivo para que o compilador possa reconhecer a classe.

Fonte
Equipe SuaDica
Mais Dicas