Dwie diody LED, dwa tempa
Część sekcji Odmierzanie czasu bez delay() ścieżki Arduino w Coddy. Lekcja 4 z 18.
W przypadku delay() miganie dwóch diod LED z różnymi prędkościami to zagadka: każde oczekiwanie wstrzymuje działanie drugiej diody LED. Z millis() jest to łatwe, bo nic nie czeka.
Przypisz każdemu zadaniu własne zmienne: własny czas ostatniego wykonania i własny stan. Następnie przypisz każdemu zadaniu własne if w loop(). W każdej iteracji pętli każde zadanie sprawdza własny zegar i działa tylko wtedy, gdy nadejdzie jego czas:
unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;
void loop() {
unsigned long now = millis();
if (now - redPrevious >= 500) {
redPrevious = now;
// przełącz czerwoną diodę LED
}
if (now - greenPrevious >= 200) {
greenPrevious = now;
// przełącz zieloną diodę LED
}
}Te dwa zadania nigdy sobie nie przeszkadzają. W ten sam sposób możesz dodać trzecie i czwarte: jeden zestaw zmiennych i po jednym if dla każdego zadania.
Nigdy nie używaj jednej zmiennej czasu ostatniego wykonania dla dwóch zadań. Szybsze zadanie resetuje ją tak często, że wolniejsze nigdy nie osiągnie swojego interwału.
Wyzwanie
ŁatwyCzerwona dioda LED podłączona do pinu 13 przełącza się już co 500 ms. Spraw, aby zielona dioda LED podłączona do pinu 12 przełączała się co 200 ms w tym samym czasie:
- dodaj zmienne
greenPreviousigreenState - dodaj drugą instrukcję
ifwloop()dla zielonej diody LED
Naciśnij Uruchom i obserwuj miganie obu diod, a następnie naciśnij Sprawdź.
Spróbuj swoich sił
const int redLed = 13;
const int greenLed = 12;
unsigned long redPrevious = 0;
int redState = LOW;
// dodaj tutaj dwie zmienne dla zielonej diody LED
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
unsigned long now = millis();
// czerwona dioda LED zmienia stan co 500 ms
if (now - redPrevious >= 500) {
redPrevious = now;
if (redState == LOW) {
redState = HIGH;
} else {
redState = LOW;
}
digitalWrite(redLed, redState);
}
// spraw, aby zielona dioda LED zmieniała tutaj stan co 200 ms
}
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()
1millis()
Zegar millis()Czas w typie unsigned longMiganie bez opóźnieniaDwie diody LED, dwa tempaMiganie podczas przełączania przyciskiemŚwiatło na czas4Precyzyjne odmierzanie czasu
Pomiar za pomocą micros()Gdy licznik millis() się przepełniaStoper z przyciskiemPoćwicz samodzielnie: Edytor online Arduino