enum InterruptPins {
INT_PIN_1 = 3,
INT_PIN_2 = 18
};
const byte debounceDelay = 250;
volatile bool flag[2] = {false, false};
unsigned long lastDebounceTime[2] = {0, 0};
// Protótipos de função
void callISR(InterruptPins pin);
void handleISR(InterruptPins pin);
void ISR(InterruptPins pin);
void setup() {
Serial.begin(9600);
pinMode(INT_PIN_1, INPUT_PULLUP);
pinMode(INT_PIN_2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(INT_PIN_1), []() { ISR(INT_PIN_1); }, RISING);
attachInterrupt(digitalPinToInterrupt(INT_PIN_2), []() { ISR(INT_PIN_2); }, RISING);
}
void loop() {
handleISR(INT_PIN_1);
handleISR(INT_PIN_2);
}
void callISR(InterruptPins pin) {
switch (pin) {
case INT_PIN_1:
Serial.println("ISR1");
break;
case INT_PIN_2:
Serial.println("ISR2");
break;
}
}
void handleISR(InterruptPins pin) {
int index = static_cast<int>(pin) - INT_PIN_1;
if (flag[index] && (millis() - lastDebounceTime[index] > debounceDelay)) {
callISR(pin);
lastDebounceTime[index] = millis();
flag[index] = false;
}
}
void ISR(InterruptPins pin) {
int index = static_cast<int>(pin) - INT_PIN_1;
flag[index] = true;
}