const int buttonPin = 2; // define o pino que o botão está conectado
int buttonState = HIGH; // o estado atual do botão
int lastButtonState = HIGH; // o último estado do botão
long lastDebounceTime = 0; // último tempo que o botão foi acionado
long debounceDelay = 50; // tempo de debounce; aumentar se a leitura não estiver estável
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // configura o pino do botão como entrada com resistor de pull-up interno
Serial.begin(9600); // inicializa a comunicação serial com a velocidade de 9600 baud
}
void loop() {
int reading = digitalRead(buttonPin); // lê o estado do botão
if (reading != lastButtonState) {
lastDebounceTime = millis(); // atualiza o tempo do último toque
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
// detecta um toque curto
Serial.println("Toque curto");
delay(50);
// detecta um segundo toque curto em menos de 300ms
if (digitalRead(buttonPin) == LOW) {
delay(50);
if (digitalRead(buttonPin) == HIGH) {
Serial.println("Dois toques");
}
}
// detecta um terceiro toque curto em menos de 300ms
if (digitalRead(buttonPin) == LOW) {
delay(50);
if (digitalRead(buttonPin) == HIGH) {
Serial.println("Três toques");
}
}
} else {
// detecta um toque longo
Serial.println("Toque longo");
}
}
}
lastButtonState = reading; // atualiza o último estado do botão
}