====== ESP32 Interrupt-Programmierung =====
===== Erkennung der Flanke ====
==== Abfrage des GPIO-Status ====
Ansatz: Abfrage des PINs unmittelbar nach Auslösung des Interrupts.
void IRAM_ATTR isr_handler(void* arg) {
int pinState = digitalRead(PIN);
if(pinState == HIGH) {
// steigende Flanke
} else {
// fallende Flanke
}
}
==== Einzelne ISRs ====
Ansatz: Getrennte ISRs für steigende und fallende Flanken
void IRAM_ATTR rising_isr_handler(void* arg) {
// steigende Flanke
}
void IRAM_ATTR falling_isr_handler(void* arg) {
// fallende Flanke
}
/*
* setup
*/
pinMode(PIN, INPUT);
attachInterrupt(PIN, rising_isr_handler, RISING);
attachInterrupt(PIN, falling_isr_handler, FALLING);