Menu
CoddyTech

İ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.

challenge icon

Görev

Kolay

13 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:

  • greenPrevious ve greenState değişkenlerini ekle
  • yeşil LED için loop() içine ikinci bir if ekle

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
}
quiz iconKendini test et

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