#define Btn1_GPIO 35
#define LED1_GPIO 5
const int buttonPin = 14; // the number of the pushbutton pin
int buttonState = 0;
volatile bool flag = false; // Variável volátil usada para indicar a interrupção int
int contador = 0;
unsigned long lastInterruptTime = 0; // Armazena o tempo da última interrupção
const unsigned long debounceDelay = 500; // Atraso para o debounce (500 ms)
bool interrupcaoAtiva = true;
void IRAM_ATTR Ext_INT1_ISR()
{
// Toggle The LED
unsigned long currentTime = millis(); // Obtém o tempo atual em milissegundos
if (currentTime - lastInterruptTime > debounceDelay)
{ // Verifica se passou tempo suficiente
flag = true; // Sinaliza que a interrupção ocorreu
lastInterruptTime = currentTime; // Atualiza o tempo da última interrupção
detachInterrupt(digitalPinToInterrupt(Btn1_GPIO)); // Desativa a interrupção
}
}
void setup()
{
Serial.begin(115200);
pinMode(LED1_GPIO, OUTPUT);
pinMode(Btn1_GPIO, INPUT_PULLUP);
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(Btn1_GPIO, Ext_INT1_ISR,HIGH);
}
void loop()
{
if (flag)
{
contador++;
flag = false; // Limpa a bandeira da interrupção
Serial.println("Interrupção detectada!");
Serial.println(contador);
Serial.println("Interrupção desligado!");
digitalWrite(LED1_GPIO, !digitalRead(LED1_GPIO));
delay(2000); // Mantém o LED aceso por 2 segundos (ajustável)
digitalWrite(LED1_GPIO, !digitalRead(LED1_GPIO));
delay(5000);
Serial.println("Interrupção ligado!");
attachInterrupt(Btn1_GPIO, Ext_INT1_ISR, HIGH);
}
// Do Nothing...
}