Inhaltsverzeichnis

Interrupts

Bei den Arduino Mikrocontrollern sind Interrupts im Grunde ein Signal, das es ermöglicht, eine Funktion in einem Sketch jederzeit direkt aufzurufen, gleichgültig, womit der Arduino sonst gerade „beschäftigt“ ist.

Wird ein Interrupt ausgelöst, wird der Ablauf des Programms angehalten, die Interrupt-Funktion ausgeführt 1), wenn die ISR abgearbeitet ist, wird das das Programm an der Stelle der Unterbrechung fortgeführt.

Wie macht mans?

Der Ardunio Uno hat zwei Interrupts, die Pins 2 und 3 können verwendet werden. Um eine Interrupt-Service-Routine mit einem Interrupt zu verknüpfen, verwendet man die folgende Syntax:

attachInterrupt(PIN, ISR, mode)

dabei ist:

Beispiel 1


(A1)

Das Programm steuert ein Lauflicht mit 8 LEDs. Erläutere, wie die LEDs anschlossen sein müssen, damit das funktioniert. Welche Verhaltensweise wird durch den Einsatz des Interrupts erreicht?


ISR-Regeln

Für ISR gelten einige besondere Regeln:

Beispiel 2


(A2)

Interrupts aktivieren/deaktivieren

Manchmal möchte man in bestimmten Sequenzen eines Programms eine Unterbrechung des Ablaufs durch Interrupts nicht zulassen, in anderen aber schon. Dazu kann man dem Arduino mitteilen, ob er auf Interrupts reagieren soll oder nicht:

noInterrupts(); // Ab jetzt nicht mehr auf IR reagieren!
// anderer Code, der nicht unterbrochen werden soll
interrupts(); // Ab hier wieder auf IR reagieren

Weitere Informationen findest du hier: https://gammon.com.au/interrupts

Material

:faecher:nwt:arduino:lernbaustein2:interrupt:*

1)
„ISR“ - Interrupt Service Routine