// Interrupt-Driven Button - XIAO ESP32-S3
// Using D1 as the interrupt pin
const int BUTTON_PIN = D1;
volatile bool buttonState = false;
volatile unsigned long lastInterrupt = 0;
void IRAM_ATTR handleButton() {
unsigned long now = millis();
if (now - lastInterrupt > 50) { // debounce
buttonState = !buttonState;
lastInterrupt = now;
}
}
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLDOWN);
attachInterrupt(BUTTON_PIN, handleButton, RISING);
}
void loop() {
if (buttonState) {
Serial.println("Button Interrupt Triggered");
buttonState = false;
}
}