Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Die 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 greenPrevious und greenState hinzu
  • füge ein zweites if in loop() 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
}
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