Taster als Einschalter einer LED
Das Programm demonstriert die Verwendung eines Tasters.
Wird der Taster gedrückt, leuchtet die LED.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // Variablen für die LED und den Taster setzen int LED = 7; int TASTER = 8; // speichert den mit digitalRead gelesenen Wert int TasterLesen; void setup() { // pinMode LED setzen, Ausgabe = OUTPUT pinMode(LED, OUTPUT); /* pinMode des Tasters setzen INPUT = Modus Eingabe INPUT_PULLUP = Modus Eingabe und Eingangspegel auf HIGH setzen */ pinMode(TASTER, INPUT_PULLUP); } void loop() { // Status des Tasters lesen (HIGH/LOW) TasterLesen = digitalRead(TASTER); // wenn der Taster gedrückt wurde if (TasterLesen == LOW) { // kurze Pause delay(200); // Wert für LED schreiben // LOW = aus, HIGH = an digitalWrite(LED, HIGH); } } |
Taster als Ein- und Ausschalter der LED
Wird der Taster gedrückt, soll die LED leuchten, ein erneuter Tasterdruck schaltet die LED aus. Der Zustand der LED (ein- oder ausgeschaltet soll mit einer Variablen vom Typ bool ermittelt werden.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | int LED = 7; int TASTER = 8; int TasterLesen; /* setzt den Status Status true -> LED an Status false -> LED aus beim Start soll die LED ausgeschaltet sein */ bool Status = false; void setup() { pinMode(LED, OUTPUT); pinMode(TASTER, INPUT_PULLUP); } void loop() { TasterLesen = digitalRead(TASTER); if (TasterLesen == LOW) { delay(200); // LED ist aus ⇒ Status == false if (Status == false) { digitalWrite(LED, HIGH); // Status auf true (an) setzen Status = true; } // LED ist an ⇒ Status == true else if (Status == true) { digitalWrite(LED, LOW); // Status auf false (aus) setzen Status = false; } } } |
Es geht auch kürzer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | int LED = 7; int TASTER = 8; int TasterDruck; /* setzt den ZustandLED ZustandLED true -> LED an ZustandLED false -> LED aus beim Start soll die LED ausgeschaltet sein */ bool ZustandLED = false; void setup() { pinMode(LED, OUTPUT); // Pin 7 auf HIGH setzen pinMode(TASTER, INPUT_PULLUP); } void loop() { TasterDruck = digitalRead(TASTER); // der Pin 7 wurde auf HIGH gesetzt -> gedrückt = LOW if (TasterDruck == LOW) { delay(200); /* ZustandLED umdrehen aus false wird true LED einschalten aus true wird false -> LED ausschalten */ ZustandLED = !ZustandLED; // LED schalten: false = aus, true = an digitalWrite(LED, ZustandLED); } } |
Taster entprellen

Leider verhindert das delay(200) nur sehr unzureichend das sogenannte “Prellen” eines Tasters. Wird der Taster über eine längere Zeit gedrückt gehalten, wechselt das ausgesendete Signal immer wieder zwischen HIGH und LOW. Dies führt zu unerwünschten Effekte:. Im Beispielpogramm blinkt die LED solange der Taster gedrückt wird.
Lösung mit millis()

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | // Variablen für die mit millis() ermittelte Zeit // damit nur jeweils ein Tasterdruck erkannt wird static unsigned long GesicherteStartZeit = 0; unsigned long Startzeit; int LED = 7; int TASTER = 8; // Zustand der LED: ein- oder ausgeschaltet bool ZustandLED = false; void setup() { pinMode(LED, OUTPUT); pinMode(TASTER, INPUT_PULLUP); } void loop() { int Tasterdruck = digitalRead(TASTER); // Taster wurde gedrückt if (Tasterdruck == LOW) { // aktuelle Zeit sichern Startzeit = millis(); /* bei mehr als 50 Millisekunden Differenz zwischen der aktuellen und der gesicherten Zeit kann der Taster als gedrückt betrachtet werden -> ZustandLED umdrehen aus false wird true LED einschalten aus true wird false -> LED ausschalten */ if (Startzeit - GesicherteStartZeit > 50) { ZustandLED = !ZustandLED; } // Startzeit zurücksetzen GesicherteStartZeit = Startzeit; digitalWrite(LED, ZustandLED); } } |
Lösung mit der Bibliothek Bounce2
Abhilfe schafft hier die Bibliothek Bounce2.
Bevor sie verwenden kannst, musst du sie zunächst installieren:
Sketch -> Bibliothek einbinden -> Bibliotheken verwalten


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | // Bibliothek Bounce2 einbinden #include <Bounce2.h> // Bounce starten // Namen des Objekts Bounce (TasterGedrueckt) festlegen Bounce TasterGedrueckt = Bounce(); int LED = 7; int TASTER = 8; /* setzt den Status Status true -> LED an Status false -> LED aus beim Start soll die LED ausgeschaltet sein */ bool Status = false; void setup() { pinMode(LED, OUTPUT); /* Namen des Objekts Bounce (TasterGedrueckt) dem Taster zuordnen (attach) Zeitintervall einstellen INPUT_PULLUP -> Eingangspegel auf HIGH setzen */ TasterGedrueckt.attach(TASTER, INPUT_PULLUP); TasterGedrueckt.interval(20); } void loop() { // Tasterstatus abfragen if (TasterGedrueckt.update()) { // Taster wurde gedrückt, das Signal ist gefallen if (TasterGedrueckt.fell()) { // LED ist aus ⇒ Status == false if (Status == false) { digitalWrite(LED, HIGH); // Status auf true (an) setzen Status = true; } // LED ist an ⇒ Status == true else if (Status == true) { digitalWrite(LED, LOW); // Status auf false (aus) setzen Status = false; } } } } |
Leuchtdauer einer LED messen
Mit der selben Schaltung soll die Leuchtdauer einer LED gemessen werden.

Die Messung startet, wenn der Taster gedrückt wird.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | // Bibliothek Bounce2 einbinden #include “Bounce2.h” // Bounce starten // Namen des Objekts Bounce (TasterGedrueckt) festlegen Bounce TasterGedrueckt = Bounce(); int LED = 7; int TASTER = 8; /* setzt den Status Status true -> LED an Status false -> LED aus beim Start soll die LED ausgeschaltet sein */ bool Status = false; // Startzeit wird mit millis() ermittelt unsigned long Startzeit; // verstrichene Zeit in Millisekunden unsigned long VerstricheneZeit; float Sekunden; int Minute; void setup() { pinMode(LED, OUTPUT); /* Namen des Objekts Bounce (TasterGedrueckt) dem Taster zuordnen (attach) Zeitintervall einstellen INPUT_PULLUP -> Eingangspegel auf HIGH setzen */ TasterGedrueckt.attach(TASTER, INPUT_PULLUP); TasterGedrueckt.interval(20); Serial.begin(9600); } void loop() { // Tasterstatus abfragen if (TasterGedrueckt.update()) { // Taster wurde gedrückt, das Signal ist gefallen if (TasterGedrueckt.fell()) { // LED ist aus ⇒ Status == false if (Status == false) { digitalWrite(LED, HIGH); // Status auf true (an) setzen Status = true; // wenn Status == true -> Timer starten if (Status) Startzeit = millis(); } // LED ist an ⇒ Status == true else if (Status == true) { digitalWrite(LED, LOW); // Dauer des Einschaltens der LED berechnen VerstricheneZeit = millis() - Startzeit; Sekunden = VerstricheneZeit / 1000.0; String AnzeigeSekunden = String(Sekunden); AnzeigeSekunden.replace(“.”, “,”); // Sekunden anzeigen Serial.println(“Leuchtdauer: ” + AnzeigeSekunden + ” Sekunde(n)”); // Minuten berechnen und anzeigen Minute = Sekunden / 60; if (Minute > 0) { Serial.print(“ = ” + String(Minute) + ” Minute(n): ”); Sekunden = Sekunden - Minute * 60; Serial.println(String(Sekunden) + ” Sekunde(n)”); } // Status auf false (aus) setzen Status = false; } } } } |
Letzte Aktualisierung: