Reference   Language | Libraries | Comparison | Changes

attachInterrupt()

Beschreibung

Bezeichnet eine Funktion, die dann aufgerufen wird, wenn ein externer Interrupt auftritt. Ersetzt jede bis zum Eintreffen des Interrupts ausgeführte Funktion. Die meisten Arduino Boards haben zwei externe Interrupts: Nummer 0 (auf digitalem Pin2) und 1 (auf digitalem Pin3). Die nachstehende Tabelle zeigt die verfügbaren Interrupts der jeweiligen Boards.

Boardint.0int.1int.2int.3int.4int.5
Uno, Ethernet23
Mega25602321201918
Leonardo3201
Due(siehe unten)

Das Arduino Due Board hat mächtige Interrupt-Möglichkeiten, die es erlauben eine Interrupt-Funktion an alle verfügbare Pins zu legen. Die Pinnummer kann direkt in der attachInterrupt() bezeichnet werden.

Syntax

attachInterrupt(interrupt, function, mode)
attachInterrupt(pin, function, mode) (nur Arduino Due)

Parameter

interrupt: die Nummer des Interrupts (int)

pin: die Pinnummer (Arduino Due only)

function: die Funktion, die aufgerufen wird, wenn ein Interrupt eintrifft; diese Funktion darf keine Parameter und auch keine Rückgaben enthalten. Manchmal wird diese Funktion auch als interrupt service routine bezeichnet.

mode:

definiert wann genau der Interrupt eingeleitet (getriggert) werden soll . Vier Konstanten sind bereits als zulässige Werte vordefiniert worden:

  • LOW triggert den Interrupt, wenn der Pin low ist,
  • CHANGE triggert den Interrupt, wenn der Pin seinen Wert ändert,
  • RISING triggert den Interrupt, wenn der Pin seinen Wert von low nach high ändert,
  • FALLING triggert den Interrupt, wenn der Pin seinen Wert von high nach low ändert.

Das Due Board erlaubt auch:

  • HIGH triggert den Interrupt, jedesmal wenn der Pin high ist.
(nur Arduino Due)

Rückgaben

keine

Hinweise

Die Funktion delay() als Funktion innerhalb des Interrupts funktioniert nicht, ebenso wird millis() die zurückgegebenen Werte nicht hochzählen. Serielle Daten, die während der Funktion eintreffen, werden nicht berücksichtigt und gehen verloren. Jede Variable die innerhalb der eingebetteten Funktion verändert wird sollte als volatile deklariert werden.

Der Gebrauch von Interrupts

Interrupts sind sinnvoll um Vorgänge in Mikrocontrollerprogrammen automatisch ablaufen zu lassen. Sie können ebenfalls dabei helfen Zeitprobleme zu lösen. Typische Aufgaben für ein Interrupt sind z.B. Drehwinkelgeber und Überwachung von Benutzereingaben.

Wenn man sicher sein möchte, dass ein Programm alle Impulse eines Dreahwinkelgebers aufnimmt und keinen Impuls versäumt, ist sehr schwierig ein Programm zu schreiben, das auch noch in der Lage ist andere Aufgaben zu übernehmen. Das Programm muss permanent die Anschlüsse des Sensors abfragen (pollen) mit dem Ziel, eintreffende Impulse zu erkennen und zu verarbeiten. Es gibt andere Sensoren, die ein ähnliches dynamisches Verhalten haben, z.B. ein Geräusch-Sensor, der auf ein Klick wartet oder ein Infrarot-Schlitzsensor (Gabellichtschranke), der einen Münzeinwurf erkennen soll. In all diesen Fällen kann ein Interrupt den Mikrocontroller entlasten und ihm Zeit geben andere Vorgänge abzuarbeiten ohne einen Input zu "übersehen".

Beispiel

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}

Siehe auch

Reference Home

Corrections, suggestions, and new documentation should be posted to the Forum.

The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.

Share