#define BOTAO 5
#define LED 13
hw_timer_t *timer = NULL;
volatile bool piscar = false;
int contagem = 0;
bool estadoAnterior = HIGH;
unsigned long ultimoClique = 0;
// interrupção do timer
void IRAM_ATTR onTimer() {
piscar = true;
}
void setup() {
pinMode(BOTAO, INPUT_PULLUP);
pinMode(LED, OUTPUT);
// timer com base de 1 MHz
timer = timerBegin(1000000);
// associa a função de interrupção
timerAttachInterrupt(timer, &onTimer);
// dispara a cada 100ms = 10Hz
timerAlarm(timer, 100000, true, 0);
}
void loop() {
bool estadoAtual = digitalRead(BOTAO);
// detecta clique real (HIGH -> LOW)
if (estadoAnterior == HIGH && estadoAtual == LOW) {
// debounce por tempo
if (millis() - ultimoClique > 300) {
contagem++;
ultimoClique = millis();
}
}
estadoAnterior = estadoAtual;
// quando chegar em 5 cliques
if (contagem >= 5) {
contagem = 0;
unsigned long inicio = millis();
// pisca por 10 segundos
while (millis() - inicio < 10000) {
if (piscar) {
piscar = false;
digitalWrite(LED, !digitalRead(LED));
}
}
digitalWrite(LED, LOW);
}
}Loading
esp32-devkit-c-v4
esp32-devkit-c-v4