Projekt B03 - Eingaben verarbeiten
Projekt B01 und B02 abgeschlossen
Was du brauchst
Schließt den Stromkreis nur solange er gedrückt wird. Typisch: 4 Pins (je 2 verbunden).
In Wokwi: "pushbutton" suchen
Zeigt visuell an, ob der Taster erkannt wurde.
Von Projekt B01 bereits bekannt
Der Arduino hat interne Pull-ups! Du brauchst keinen externen Widerstand. Wir nutzen INPUT_PULLUP im Code.
Ein offener GPIO-Pin hat keinen definierten Zustand - er "schwebt" (floating) und kann zufällig HIGH oder LOW sein.
Ein Pull-up Widerstand zieht den Pin auf HIGH, wenn der Taster offen ist.
5V
│
[R] ← Pull-up (intern!)
│
├──► GPIO (liest HIGH)
│
[/] ← Taster
│
GND
Gedrückt: GPIO → GND = LOW
Warum ein Tastendruck mehrfach erkannt wird
Mechanische Taster "prellen" - der Kontakt öffnet und schließt mehrmals sehr schnell, bevor er stabil ist.
Ein Tastendruck kann als 5-10 Tastendrücke erkannt werden!
HIGH ─┐ ┌┐ ┌┐ ┌───────────
│ ││ ││ │
LOW └───┘└──┘└──┘
↑ Prellen (mehrere Flanken)
HIGH ─┐ ┌────────
│ │
LOW └───────────────┘
↑ Saubere Flanke
// Schritt 1: Einfaches Taster-Lesen (noch ohne Entprellung)
const int LED_PIN = 7;
const int TASTER_PIN = 6;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(TASTER_PIN, INPUT_PULLUP); // Mit internem Pull-up
Serial.begin(9600);
}
void loop() {
if (digitalRead(TASTER_PIN) == LOW) { // LOW = gedrueckt
digitalWrite(LED_PIN, HIGH);
Serial.println("Taster gedrueckt!");
} else {
digitalWrite(LED_PIN, LOW);
}
delay(10);
}Die LED leuchtet nur solange der Taster gedrückt wird. Und "Taster gedrückt!" erscheint sehr oft in der Konsole!
// Schritt 2: Mit einfacher Entprellung
const int LED_PIN = 7;
const int TASTER_PIN = 6;
int ledZustand = LOW;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(TASTER_PIN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if (digitalRead(TASTER_PIN) == LOW) { // Gedrueckt?
delay(50); // Entprellzeit abwarten
if (digitalRead(TASTER_PIN) == LOW) { // Immer noch?
ledZustand = !ledZustand; // LED umschalten
digitalWrite(LED_PIN, ledZustand);
Serial.println("Klick!");
// Warten bis losgelassen
while (digitalRead(TASTER_PIN) == LOW) {
delay(10);
}
}
}
delay(10);
}Jetzt wird pro Tastendruck nur einmal "Klick!" ausgegeben und die LED toggelt zuverlässig.
// Fertige Version: Taster mit Zaehler
const int LED_PIN = 7;
const int TASTER_PIN = 6;
int zaehler = 0;
int ledZustand = LOW;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(TASTER_PIN, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("Druecke den Taster!");
}
void loop() {
if (digitalRead(TASTER_PIN) == LOW) {
delay(50); // Entprellen
if (digitalRead(TASTER_PIN) == LOW) {
zaehler++;
ledZustand = !ledZustand;
digitalWrite(LED_PIN, ledZustand);
Serial.print("Tastendruck #");
Serial.println(zaehler);
while (digitalRead(TASTER_PIN) == LOW) {
delay(10);
}
}
}
delay(10);
}Jeder Tastendruck wird gezählt und die LED toggelt. Perfekt zum Testen der Entprellung!
Simulation in Wokwi
Erkenne ob der Taster kurz (<500ms) oder lang (>1s) gedrückt wurde. Unterschiedliche Aktionen!
Erkenne einen Doppelklick (zwei Klicks innerhalb von 300ms).
Nutze 3 LEDs um den Zählerstand binär anzuzeigen (0-7).
Wechsle mit dem Taster zwischen verschiedenen Blink-Modi der LED.
Du kannst jetzt Eingaben verarbeiten
Pins als Eingang nutzen
Interne Widerstände
Saubere Erkennung
B04: Potentiometer - Analoge Werte lesen und LED dimmen