Menu
CoddyTech

Ein Licht mit Zeitschaltuhr

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

Eine Treppenhausbeleuchtung geht an, wenn du ihren Knopf drückst, und kurz darauf von selbst wieder aus. Drückst du erneut, während sie eingeschaltet ist, beginnt die Zeit von vorn.

Dafür brauchst du zwei Dinge: den Zeitpunkt des letzten Drückens und die Information, ob das Licht eingeschaltet ist. Speichere den Zeitpunkt in einem unsigned long, wenn der Knopf gedrückt ist:

if (digitalRead(buttonPin) == LOW) {
  pressedAt = millis();     // die Zeit starten (oder erneut starten)
  lightOn = true;
  digitalWrite(ledPin, HIGH);
}

Prüfe dann in jedem Schleifendurchlauf, wie viel Zeit vergangen ist:

if (lightOn && millis() - pressedAt >= onTime) {
  lightOn = false;
  digitalWrite(ledPin, LOW);
}

Die beiden Teile warten nie, sodass ein Drücken jederzeit erkannt wird, auch wenn das Licht bereits eingeschaltet ist. Mit delay(2000) nach dem Drücken würde ein zweites Drücken während der Wartezeit verloren gehen.

challenge icon

Aufgabe

Einfach

Baue eine Treppenbeleuchtung:

  • Ein Tastendruck schaltet die LED an Pin 13 sofort ein
  • 2 Sekunden nach dem Tastendruck schaltet sie sich von selbst aus
  • Ein Tastendruck, während sie eingeschaltet ist, startet die 2 Sekunden erneut

Drücke Run, betätige die Taste einige Male und klicke dann auf Check.

Probier es selbst

const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000;   // wie lange das Licht eingeschaltet bleibt

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

void loop() {
  // wenn die Taste gedrückt ist: die LED einschalten und sich den Zeitpunkt merken

  // wenn seitdem onTime vergangen ist: die LED ausschalten
}
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