
Video
Schaltplan

Quellcode
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// LED mit Taster ein- und ausschalten
4// ─────────────────────────────────────────
5// Jeder Tastendruck schaltet die LED um (an/aus). Die Wartezeit von 300 ms
6// ignoriert das Tastenprellen. Wird die Taste gehalten, schaltet die LED
7// alle 300 ms um.
8//
9// Pins:
10// D13 -> Taste, anderes Beinchen an 5V
11// D13 -> 10k-Widerstand an GND (Pull-down)
12// D7 -> LED (mit 330-Ohm-Widerstand)
13
14int ledState = 0; // LED-Zustand: 0 = aus, 1 = an
15
16void setup() {
17 pinMode(13, INPUT); // Tasteneingang (externer Pull-down)
18 pinMode(7, OUTPUT); // LED-Ausgang
19}
20
21void loop() {
22 if (digitalRead(13) == 1) { // Taste gedrückt
23 ledState = !ledState; // Zustand umkehren
24 digitalWrite(7, ledState);
25 delay(300); // Das Prellen abwarten
26 }
27}
28FAQ
Was ist Debounce und warum ist es notwendig?▾
Sobald der mechanische Taster gedrückt wird, schaltet er für einige Millisekunden mehrfach ein und aus (Prellverhalten). Der Arduino könnte dies als mehrere Tastenbetätigungen interpretieren, wodurch der Zustand der LED unvorhersehbar bleibt. Durch das Debounce-Verfahren werden diese Prellungen ignoriert, indem nach einem Zustandswechsel eine kurze Zeit (z. B. 50 ms) abgewartet wird.
Die LED wechselt manchmal nicht oder wechselt zweimal – warum?▾
In der Regel fehlt die Entprellung oder ist zu kurz. Außerdem muss nur der Moment erfasst werden, in dem die Taste „gedrückt“ wird (vorheriger Zustand LOW, neuer Zustand HIGH); wenn der Zustand in jedem Zyklus geändert wird, solange die Taste gedrückt gehalten wird, flackert die LED und bleibt zufällig leuchten.
Wozu dient die Statusvariable?▾
Es speichert, ob die LED ein- oder ausgeschaltet ist. Bei jedem gültigen Tastendruck wird die Variable invertiert (ledStatus = !ledStatus) und die LED entsprechend diesem Wert angesteuert.
Kann ich mit mehreren Tasten verschiedene LEDs steuern?▾
Ja, es reicht aus, wenn du für jede Taste einen eigenen Pin, einen eigenen Variablenwert für den vorherigen Zustand und einen eigenen Variablenwert für den LED-Zustand speicherst. Wenn du viele Tasten verwendest, lassen sich Arrays und ein auf `millis()` basierender Debounce-Code besser organisieren.
