Für dieses Projekt benötigst du
Aufgabe Nr. 25 : Das Leuchten einer LED durch einen Tastendruck unterbrechen
In dieser Aufgabe möchten wir das durchgehende Leuchten einer LED mit Hilfe eines Tasters unterbrechen.
Anschließend soll das Leuchten der LED fortgesetzt werden.
Der Schaltplan

Unser Taster wird an Pin 2 des Arduinos angeschlossen.
Unsere LED wird an Pin 7 des Arduinos angeschlossen.
Das Programm im Film
Erklärung des Programms
Bisher haben wir eine LED entweder ein- oder ausgeschaltet (zum Beispiel mit einem delay), doch nie eine bestehende Aktion unterbrochen. Dies gelingt uns nun mit dem sogenannten Interrupt-Befehl.
Es gibt verschiedene Ereignisse, die den Interrupt auslösen können:

Erklärung zum Befehl attachInterrupt
attachInterrupt(digitalPinToInterrupt(Taster), TasterUnterbricht, CHANGE);
Der Taster wird einem Interrupt zugeordnet (attachInterrupt).
Mit digitalPinToInterrupt wird der Pin des Tasters dem Interrupt zugewiesen.
Wenn der Taster betätigt wird, löst er den Interrupt aus. Als Bedingung wird CHANGE definiert, der Interrupt wird also ausgelöst, wenn der Zustand sich von HIGH zu LOW ändert.
Der normale Programmablauf wird unterbrochen und die festgelegte Funktion (Interrupt-Service-Routine) TasterUnterbricht wird ausgeführt. Anschließend wird das Programm normal fortgesetzt.
Der Taster muss zwingend am Pin 2 oder Pin 3 angeschlossen werden.
Zusätzlich muss eine Variable, die im Hauptprogramm und in Interruptroutinen verwendet wird, als volatile definiert werden.
Es kann vorkommen, dass der Wert einer Variablen im Speicher durch eine neue Wertzuweisung für kurze Zeit nicht stimmt.
Das Schlüsselwort volatile weist das Programm an, die Variable immer aktuell im Speicher zu halten. Damit wird garantiert, dass der jeweils aktuelle Wert verwendet wird.
Die Definition einer Variablen muss also mit dem Schlüsselwort volatile erweitert werden:
volatile bool LEDStatus = LOW;
Das Programm
#define LED 7
#define TASTER 2
/*
je nach Zustand der Variable TasterStatus ist die LED ein- oder ausgeschaltet
beim Start des Programms ist sie ausgeschaltet
*/
volatile bool LEDStatus = LOW;
void setup()
{
pinMode(LED, OUTPUT);
// Eingangspegel des Tasters auf HIGH setzen
pinMode(TASTER, INPUT_PULLUP);
/*
wenn der Taster gedrückt wird
⇒ Funktion LEDSchalten aufrufen
CHANGE ⇒ es ist eine Veränderung eingetreten, der Taster
wurde gedrückt
*/
attachInterrupt(digitalPinToInterrupt(TASTER), LEDSchalten, CHANGE);
}
void loop()
{
// LED schalten
digitalWrite(LED, LEDStatus);
}
void LEDSchalten()
{
// LEDStatus "umdrehen"
// aus true wird false, aus false wird true
LEDStatus = !LEDStatus;
}
Funduino - Dein Onlineshop für Mikroelektronik
-
Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
-
Mehr als 3.500 Artikel sofort verfügbar!
-
Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.