İki LED, İki Hız
Coddy'nin Arduino Journey'sinin delay() Kullanmadan Zamanlama bölümünün bir parçası. Ders 4 / 18.
delay() ile farklı hızlarda yanıp sönen iki LED bir bulmacadır: her bekleme, diğer LED'i bekletir. millis() ile iş kolaydır, çünkü hiçbir şey beklemez.
Her işe kendi değişkenlerini ver: kendine ait son zaman ve kendi durumu. Ardından her işe loop() içinde kendi if koşulunu ver. Her döngüde her iş kendi saatini kontrol eder ve yalnızca zamanı geldiğinde işlem yapar:
unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;
void loop() {
unsigned long now = millis();
if (now - redPrevious >= 500) {
redPrevious = now;
// kırmızı LED'i açıp kapat
}
if (now - greenPrevious >= 200) {
greenPrevious = now;
// yeşil LED'i açıp kapat
}
}İki iş birbirinin yoluna asla çıkmaz. Aynı şekilde üçüncü ve dördüncü bir iş ekleyebilirsin: her biri için bir değişken kümesi ve bir if.
İki iş arasında tek bir son zaman değişkenini asla paylaşma. Daha hızlı olan iş bu değişkeni o kadar sık sıfırlar ki yavaş olan iş aralığına hiçbir zaman ulaşamaz.
Görev
Kolay13 numaralı pindeki kırmızı LED zaten her 500 ms'de bir yanıp sönüyor. Yeşil LED'in 12 numaralı pinde aynı anda her 200 ms'de bir yanıp sönmesini sağla:
greenPreviousvegreenStatedeğişkenlerini ekle- yeşil LED için
loop()içine ikinci birifekle
Run'a bas ve ikisinin de yanıp sönmesini izle, ardından Check'e bas.
Kendin dene
const int redLed = 13;
const int greenLed = 12;
unsigned long redPrevious = 0;
int redState = LOW;
// yeşil LED'in iki değişkenini buraya ekle
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
unsigned long now = millis();
// kırmızı LED her 500 ms'de bir durum değiştirir
if (now - redPrevious >= 500) {
redPrevious = now;
if (redState == LOW) {
redState = HIGH;
} else {
redState = LOW;
}
digitalWrite(redLed, redState);
}
// yeşil LED'in burada her 200 ms'de bir durum değiştirmesini sağla
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
delay() Kullanmadan Zamanlama bölümündeki tüm dersler
Kendi başına pratik yap: Arduino playground