#include <Arduino.h>
int contadorCliques = 0;
class Botao {
private:
byte pino;
bool estadoAnterior;
unsigned long tempoAnterior;
public:
Botao(byte pino) {
this->pino = pino;
pinMode(pino, INPUT_PULLUP);
estadoAnterior = false;
tempoAnterior = 0;
}
void press(void (*press)(),void (*longPress)()) {
bool estadoBotao = !digitalRead(pino);
unsigned long tempoAtual = millis();
if (estadoBotao && !estadoAnterior && (tempoAtual - tempoAnterior) > 25) {
tempoAnterior = tempoAtual;
//Serial.println("Down");
//press();
}
else if (!estadoBotao && estadoAnterior && (tempoAtual - tempoAnterior) > 25) {
tempoAnterior = tempoAtual;
//Serial.println("Up");
press();
}
else if (estadoBotao ) {
if(tempoAtual - tempoAnterior > 2000){
tempoAnterior = tempoAtual;
//Serial.println("5sec");
longPress();
return;
}
}
estadoAnterior = estadoBotao;
}
};
void inc() {
contadorCliques++;
Serial.print("Contagem: ");
Serial.println(contadorCliques);
}
void dec() {
contadorCliques--;
Serial.print("Contagem: ");
Serial.println(contadorCliques);
}
void rst(){
contadorCliques = 0;
Serial.print("Contagem: ");
Serial.println(contadorCliques);
}
Botao Up(32);
Botao Down(33);
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void loop() {
Up.press(inc, rst);
Down.press(dec, rst);
delay(10);
}