Menu
CoddyTech

Blinken, während ein Taster umschaltet

Teil des Abschnitts Timing ohne Delay der Arduino-Journey von Coddy. Lektion 5 von 18.

Eine Skizze, die nie wartet, kann gleichzeitig eine Taste überwachen und ein Blinken ausführen. Jede Schleife dauert nur wenige Mikrosekunden, sodass das Board die Taste tausende Male pro Sekunde abfragt und selbst einen sehr kurzen Tastendruck erkennt.

Das Blinken folgt dem millis()-Muster. Die Taste wird mit der Flankenerkennung aus dem Abschnitt Inputs abgefragt: Handle, wenn die Taste jetzt gedrückt ist und in der vorherigen Schleife nicht gedrückt war. ! bedeutet „nicht“, also bedeutet !wasPressed „war nicht gedrückt“.

bool wasPressed = false;

void loop() {
  // das Blinken: if (now - previous >= 500) { ... }

  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed && !wasPressed) {
    // der Taster wurde gerade gedrückt
  }
  wasPressed = pressed;
}

Füge beide Teile nacheinander in loop() ein und verwende in keinem von beiden delay(). Wenn das Blinken 500 ms warten würde, bliebe ein Tastendruck, der während der Wartezeit beginnt und endet, unbemerkt.

challenge icon

Aufgabe

Mittel

Lass das Board zwei Dinge gleichzeitig tun:

  • Die rote LED an Pin 13 schaltet alle 500 ms um, gesteuert mit millis()
  • Jeder Tastendruck schaltet die gelbe LED an Pin 12 um: an, dann aus, dann wieder an

Ein kurzer Tastendruck muss jederzeit funktionieren, und wenn du die Taste gedrückt hältst, schaltet die gelbe LED nur einmal um. Drücke Run, tippe auf die Taste und drücke dann Check.

Probier es selbst

const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(yellowLed, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  // 1. Schalte die rote LED alle 500 ms mit millis() um

  // 2. Jeder Tastendruck schaltet die gelbe LED ein oder aus
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Timing ohne Delay

Übe selbstständig: Arduino-Playground