Interrupts können auch mit der Arduino IDE programmiert werden. Bei einem Interrupt wird die loop() Schleife unterbrochen und ein Unterprogramm ausgeführt.

Das gewöhnliche Arduino-Board kann zwei Interrupts erfassen:

  • Interrupt 0 (INT0) am digitalen Port 2
  • Interrupt 1 (INT1) am digitalen Port 3

volatile unsigned int

Variablen, die im Hauptprogramm deklariert wurden und in der ISR(Interrupt Service Routine) geändert werden sollen, müssen als "volatile" im Hauptprogramm deklariert werden. Andernfalls nimmt der Compiler an, dass die Variable nicht mehr verändert werden soll und ersetzt diese durch eine Konstante.

attachInterrupt();

Der Arduino muss wissen, wie er auf Interrupts reagiert und welches Unterprogramm beim Auftreten eines Interrupts ausgeführt werden soll, deshalb muss dessen Adresse festgelegt werden. Dies wird im setup() mit der Methode attachInterrupt() erledigt. 

attachInterrput(Interrupt, function, mode);

interrupt: Legt die Nummer des Interrupts fest

function: Adresse der ISR

mode: Definiert die Auslösebedingung: 

  • LOW: Interrupt, wenn der Pin Low-Pegel hat
  • CHANGE: Interrupt, wenn der Pin seinen Wert wechselt
  • RISING: Interrupt bei steigender Flanke am Pin
  • FALLING: Interrupt bei fallender Flanke am Pin


Innerhalb der ISR funktioniert delay() nicht und der Ergebniswert von millis() bleibt konstant.

Dazu gibt es auch weitere Methoden:

  • detachInterrupt(interrupt): Schaltet den per attachInterrupt() aktivierten Interrupt wieder aus
  • noInterrupts(): Alle Interrupts abschalten
  • Interrupts(): Erlaubt Interrupts (wird nach dem Aufruf von noInterrupts() benötigt)
Zuletzt geändert: Freitag, 21. Januar 2022, 11:44