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 > 800){
tempoAnterior = tempoAtual;
//Serial.println("5sec");
longPress();
return;
}
}
estadoAnterior = estadoBotao;
}
};
int posicao = 0;
bool dir = false;
Botao pos(2);
void teste(){
if( dir && posicao > 0 )
{
posicao--;
}
else if( !dir && posicao < 5 )
{
posicao++;
}
Serial.println(posicao);
}
void invert(){
dir = !dir;
// Serial.print("dir: ");
// Serial.println(dir);
}
void setup() {
Serial.begin(115200);
}
void loop() {
pos.press(teste, invert);
delay(10);
}