Was sind die häufigsten Fehler und Lösungen (Troubleshooting) bei Interrupts?
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Hier sind einige häufige Probleme und deren mögliche Lösungen:
- Der Interrupt wird nicht ausgelöst: Überprüft die Pin-Nummer und die Verkabelung.
- Mehrfache Auslösung bei einem Tastendruck: Implementiert eine Entprellung wie im folgenden Code gezeigt:
// Taster-Interrupt mit Entprellung (ISR-sicher)
const int buttonPin = 4;
const int ledPin = 2;
volatile bool buttonPressed = false; // Flag für den Taster
bool ledState = false;
unsigned long lastHandledTime = 0;
const unsigned long debounceDelay = 50;
void IRAM_ATTR handleButtonPress() {
buttonPressed = true; // Nur das Flag setzen, keine Logik in der ISR
}
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Taster-Pin mit internem Pullup-Widerstand
pinMode(ledPin, OUTPUT); // LED als Ausgang
attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, FALLING); // Interrupt bei fallender Flanke
}
void loop() {
if (buttonPressed) {
unsigned long currentTime = millis();
if ((currentTime - lastHandledTime) > debounceDelay) {
ledState = !ledState; // LED-Zustand umschalten
lastHandledTime = currentTime; // Zeit merken
}
buttonPressed = false; // Flag zurücksetzen
}
digitalWrite(ledPin, ledState); // LED anpassen
}
// Erklärung:
// Die ISR setzt nur ein Flag. Die eigentliche Entprellung und Verarbeitung
// passiert im loop(). Das macht den Code ISR-sicher und verhindert Probleme
// mit millis() oder digitalWrite() im Interrupt.
- Die LED reagiert nicht: Stellt sicher, dass die LED-Pin-Nummer korrekt ist und die LED richtig herum eingesetzt ist.
- Der Code kompiliert nicht: Überprüft, ob alle benötigten Bibliotheken installiert sind und die Syntax korrekt ist.