Menu
CoddyTech

Światło na czas

Część sekcji Odmierzanie czasu bez delay() ścieżki Arduino w Coddy. Lekcja 6 z 18.

Światło na klatce schodowej włącza się po naciśnięciu przycisku i gaśnie samo po chwili. Naciśnij przycisk ponownie, gdy światło się świeci, a odliczanie czasu zacznie się od nowa.

Potrzebne są do tego dwie rzeczy: chwila ostatniego naciśnięcia oraz informacja, czy światło jest włączone. Zapisz tę chwilę w zmiennej typu unsigned long, gdy przycisk jest wciśnięty:

if (digitalRead(buttonPin) == LOW) {
  pressedAt = millis();     // rozpocznij (lub rozpocznij ponownie) odmierzanie czasu
  lightOn = true;
  digitalWrite(ledPin, HIGH);
}

Następnie w każdej iteracji pętli sprawdzaj, ile czasu minęło:

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

Obie części nigdy nie czekają, więc naciśnięcie zostanie wykryte w dowolnym momencie, nawet gdy światło już się świeci. Jeśli po naciśnięciu użyjesz delay(2000), drugie naciśnięcie podczas oczekiwania zostanie pominięte.

challenge icon

Wyzwanie

Łatwy

Zbuduj oświetlenie schodów:

  • naciśnięcie natychmiast zapala diodę LED na pinie 13
  • 2 sekundy po naciśnięciu światło gaśnie samo
  • naciśnięcie, gdy światło jest włączone, rozpoczyna odliczanie 2 sekund od nowa

Naciśnij Run, naciśnij przycisk kilka razy, a następnie Check.

Spróbuj swoich sił

const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000;   // jak długo dioda pozostaje włączona

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

void loop() {
  // gdy przycisk jest wciśnięty: włącz diodę LED i zapamiętaj czas

  // gdy od tego momentu upłynie onTime: wyłącz diodę LED
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Odmierzanie czasu bez delay()

Poćwicz samodzielnie: Edytor online Arduino