Zwei LEDs, zwei Geschwindigkeiten
Teil des Abschnitts Timing ohne Delay der Arduino-Journey von Coddy. Lektion 4 von 18.
Mit delay() sind zwei LEDs, die unterschiedlich schnell blinken, ein Rätsel: Jede Wartezeit hält die andere LED auf. Mit millis() ist es einfach, weil nichts wartet.
Gib jeder Aufgabe ihre eigenen Variablen: ihre eigene letzte Zeit und ihren eigenen Zustand. Gib dann jeder Aufgabe ihr eigenes if in loop(). Bei jedem Schleifendurchlauf prüft jede Aufgabe ihre eigene Uhr und wird nur aktiv, wenn ihre Zeit gekommen ist:
unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;
void loop() {
unsigned long now = millis();
if (now - redPrevious >= 500) {
redPrevious = now;
// die rote LED umschalten
}
if (now - greenPrevious >= 200) {
greenPrevious = now;
// die grüne LED umschalten
}
}Die beiden Aufgaben kommen sich nie in die Quere. Du kannst auf dieselbe Weise eine dritte und eine vierte hinzufügen: jeweils ein Satz Variablen und ein if.
Verwende niemals dieselbe Variable für die letzte Zeit für zwei Aufgaben. Die schnellere Aufgabe setzt sie so oft zurück, dass die langsamere ihr Intervall nie erreicht.
Aufgabe
EinfachDie rote LED an Pin 13 schaltet bereits alle 500 ms. Lass die grüne LED an Pin 12 gleichzeitig alle 200 ms schalten:
- füge die Variablen
greenPreviousundgreenStatehinzu - füge ein zweites
ifinloop()für die grüne LED hinzu
Klicke auf Run und beobachte, wie beide blinken, dann auf Check.
Probier es selbst
const int redLed = 13;
const int greenLed = 12;
unsigned long redPrevious = 0;
int redState = LOW;
// Füge hier die beiden Variablen für die grüne LED hinzu
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
unsigned long now = millis();
// Die rote LED wechselt alle 500 ms ihren Zustand
if (now - redPrevious >= 500) {
redPrevious = now;
if (redState == LOW) {
redState = HIGH;
} else {
redState = LOW;
}
digitalWrite(redLed, redState);
}
// Sorge hier dafür, dass die grüne LED alle 200 ms ihren Zustand wechselt
}
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
1millis()
Die millis()-UhrZeitwerte in unsigned longBlinken ohne VerzögerungZwei LEDs, zwei GeschwindigkeitenBlinken, während ein Taster umschaltetEin Licht mit ZeitschaltuhrÜbe selbstständig: Arduino-Playground