const int inputPin = 34;
const int outputPin = 26;
volatile unsigned long contador = 0;
unsigned long limite = 5;
bool outputState = false;
unsigned long lastInterruptTime = 0;
void IRAM_ATTR contarPulso() {
unsigned long now = millis();
if (now - lastInterruptTime > 50) { // debounce 50ms
contador++;
if (contador == limite && !outputState) { // acende LED apenas no limite
digitalWrite(outputPin, HIGH);
outputState = true;
}
lastInterruptTime = now;
}
}
void setup() {
Serial.begin(115200);
delay(2000); // tempo para inicializar Serial Monitor no Wokwi
Serial.println("=== ESP32 Contador de Impulsos ===");
Serial.print("Limite configurado: ");
Serial.println(limite);
pinMode(inputPin, INPUT_PULLUP);
pinMode(outputPin, OUTPUT);
digitalWrite(outputPin, LOW);
attachInterrupt(digitalPinToInterrupt(inputPin), contarPulso, FALLING);
}
void loop() {
Serial.print("Contador atual: ");
Serial.println(contador);
delay(500);
}
Loading
esp32-devkit-v1
esp32-devkit-v1