In diesem neuen Beitrag möchte ich dir zeigen, wie du ein Interrupt von einem Taster am Arduino Nano abfragen / abfangen kannst.
Dieser Beitrag soll den Code aus dem Beitrag Franzis Adventskalender für Arduino – Tag 10 ergänzen.
Was ist ein Interrupt?
Ein Interrupt dient dazu, um die Ausführung eines Codes kurzfristig zu unterbrechen, um eine andere Aktion auszuführen.
Wir können also mit dieser Funktion einen laufenden Code unterbrechen und etwas anderes machen. Das ist bei Mikrocontroller wie dem Arduino sehr nützlich, denn dieser hat ja nur einen Kern und kann somit nur eine Aktion gleichzeitig laufen lassen.
Das Thema Interrupt wurde im nachfolgend verlinkten Wikipedia Artikel ausführlich besprochen.
Seite „Interrupt“. In: Wikipedia – Die freie Enzyklopädie. Bearbeitungsstand: 5. Juli 2022, 14:57 UTC. URL: https://de.wikipedia.org/w/index.php?title=Interrupt&oldid=224255302 (Abgerufen: 17. November 2022, 16:46 UTC)
Interrupt-Pins
Der Arduino Nano (sowie auch der UNO) haben zwei Interrupt-Pins jeweils an D2 (INT0) und D3 (INT1).
Schaltung – Lauflicht mit LEDs & Taster
Im nachfolgenden Beispiel möchte ich einen Taster in eine LED Lauflichtschaltung integrieren und mit diesem die Geschwindigkeit erhöhen.
Programmieren
Wie man einen Taster am Arduino programmiert, habe ich dir bereits in nachfolgenden Beiträgen gezeigt:
- Arduino Lektion #105: Taster mit Pull Up Widerstand
- Arduino Lektion 33: Taster mit Pull Down Widerstand
In der obigen Schaltung habe ich den Taster mit einem PullDown Widerstand angeschlossen.
// Taster am digitalen Pin D7 angeschlossen #define taster 2 // rote LED am digitalen Pin D3 angeschlossen #define ledRot 3 // gelbe LED am digitalen Pin D6 angeschlossen #define ledGelb 6 // gruene LED am digitalen Pin D8 angeschlossen #define ledGruen 8 // ein Array mit den LED Pins int leds[] = { ledRot, ledGelb, ledGruen }; // Array mit den möglichen Geschwindigkeiten, // hier kannst du beliebig viele Schritte // zusaetzlich hinzufuegen int geschwindigkeiten[] = { 750, 500, 250, 125, 75, 50 }; int pause = geschwindigkeiten[0]; // Variable um den Index ausserhalb der Loop zu speichern int index = 0; // Funktion welche ausgeführt werden soll wenn der Taster betätigt wird. void changeSpeed() { // Wenn der Index gleich 5 ist, also der maximale Index vom Array // mit den Geschwindigkeiten, dann... if (index == 5) { // setzen des Indexes auf -1 index = -1; } // den Index um eins erhoehen index = index + 1; // entnehmen der nächsten Geschwindigkeit aus dem Array // mit dem aktuellen Index pause = geschwindigkeiten[index]; } void setup() { // definieren das der Pin des Tasters als Eingang dient pinMode(taster, INPUT); // definieren das die Pins der LEDs als Ausgang dienen pinMode(ledRot, OUTPUT); pinMode(ledGelb, OUTPUT); pinMode(ledGruen, OUTPUT); // hinzufuegen eines Interrupts an den digitalen Pin D2 // die Funktion "changeSpeed" soll ausgeführt werden wenn // der Taster betätigt wird. attachInterrupt(digitalPinToInterrupt(taster), changeSpeed, RISING); } void loop() { // eine Schleife von 0 bis 3 um über die LED Pins im Array zu iterieren for (int i = 0; i <= 3; i++) { // Wenn die Laufvariable i gleich 0 ist dann gibt es keine vorherige LED, // welche deaktiviert werden könnte if (i > 0) { // deaktivieren der vorherigen LED digitalWrite(leds[i - 1], LOW); } // aktivieren der nächsten LED digitalWrite(leds[i], HIGH); // eine Pause einlegen delay(pause); } }
Wenn du den obigen Code auf den Mikrocontroller speicherst, dann beginnt das Lauflicht sofort mit einer Pause von 750ms. zwischen den einzelnen LEDs. Du musst also lediglich den Taster betätigen und es wird dann eine neue Zeit für die Pause aus dem Array mit einem neuen Index geladen.
1 thought on “Arduino Nano – Taster mit Interrupt”