attachInterrupt()

Lesezeit: 2 Minuten

Der loop-Teil jedes Pro­gramms wird schrit­tweise abgear­beit­et. Es ist nicht möglich gle­ichzeit­ig einen anderen Befehl auszuführen.

Beispiel:
Jed­er delay()-Befehl stoppt den Pro­gram­ma­blauf für die angegebene Zeit. In dieser Zeit kann kein ander­er Befehl aus­ge­führt wer­den.

Den­noch gibt es dafür eine Lösung:

Ein Taster kann einem Inter­rupt zuge­ord­net wer­den (attach­In­ter­rupt). Wenn der Taster betätigt wird, löst er den Inter­rupt aus.
Der nor­male Pro­gram­ma­blauf wird unter­brochen und die fest­gelegte Funk­tion (Inter­rupt-Ser­vice-Rou­tine) wird aus­ge­führt. Anschließend wird das Pro­gramm nor­mal fort­ge­set­zt.

attachInterrupt(digitalPinToInterrupt(TASTER), LED­Schal­ten, CHANGE);

Der Taster löst den Inter­rupt aus, die Inter­rupt-Ser­vice-Rou­tine (ISR) LED­Schal­ten wird aufgerufen. Der Inter­rupt soll auf einen Wech­sel des Tasterzu­s­tands (LOW oder HIGH) reagieren.
Es gibt ver­schiedene Ereignisse, die den Inter­rupt aus­lösen kön­nen:

RISINGFALLINGCHANGE
der Inter­rupt wird aus­gelöst wenn sich der Sta­tus von LOW zu HIGH ändertder Inter­rupt wird aus­gelöst wenn sich der Sta­tus von HIGH zu LOW ändertder Inter­rupt wird aus­gelöst wenn sich der Sta­tus ändert
Mikro­con­trollerNutzbare Pins
UNO2, 3
Nano2, 3
Nano Everyalle dig­i­tal­en Pins
UNO WiFi Rev2alle dig­i­tal­en Pins
MKR Fam­i­lie0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Nano 33 IoT2, 3, 9, 10, 11, 13, 15, A5, A7

Zusätz­lich muss eine Varia­ble, die im Haupt­pro­gramm und in Inter­rup­trou­ti­nen ver­wen­det wird, als vola­ti­le (flüchtig) defi­niert wer­den.
Varia­ble wer­den im ⇒SRAM und tem­po­rär in inter­nen Reg­is­tern des Prozes­sors gespe­ichert, bear­bei­tet oder ver­än­dert. Der Zugriff auf den SRAM ist aber rel­a­tiv langsam, daher kann es vor­kom­men, dass der Wert der Varia­blen im SRAM durch eine neue Wert­zu­wei­sung für kur­ze Zeit nicht stimmt, da der let­zte Wert zunächst nur in den Prozes­sor­reg­is­tern liegt. 

Das Schlüs­sel­wort vola­ti­le weist das Pro­gramm an, die Varia­ble immer aktuell im SRAM zu hal­ten. Damit wird garan­tiert, dass der jew­eils aktu­el­le Wert gela­den wird.

Weit­ere Infor­ma­tio­nen zur Spe­icherver­wal­tung

Außer­dem sind bei der Pro­gram­mierung ein­er Inter­rupt-Funk­tion einige Regeln zu beacht­en:

  • Der Pro­grammteil muss so kurz wie möglich sein.
  • Ver­wende kein delay().
  • Benutze auch kein Serial.print().

Im Beispiel­pro­gramm ist die LED beim Start aus­geschal­tet.
Jed­er Druck auf den Taster löst den Inter­rupt aus und solange der Taster gedrückt wird leuchtet die LED.

Beachte die Kom­mentare.


Letzte Aktualisierung: Okt. 23, 2025 @ 20:39