Menu
CoddyTech
flag Ar iconالعربيةdown icon

مصباحا LED بسرعتين مختلفتين

جزء من قسم التوقيت دون delay في رحلة Arduino على Coddy. الدرس 4 من 18.

باستخدام delay()، يصبح وميض مصباحي LED بسرعتين مختلفتين لغزًا: فكل فترة انتظار تعطل المصباح الآخر. أما باستخدام millis() فالأمر سهل، لأنه لا يوجد ما ينتظر.

امنح كل مهمة متغيراتها الخاصة: وقتها الأخير وحالتها الخاصة. ثم امنح كل مهمة عبارة if خاصة بها في loop(). في كل دورة، تتحقق كل مهمة من ساعتها وتعمل فقط عندما يحين وقتها:

unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;

void loop() {
  unsigned long now = millis();
  if (now - redPrevious >= 500) {
    redPrevious = now;
    // بدّل حالة مصباح LED الأحمر
  }
  if (now - greenPrevious >= 200) {
    greenPrevious = now;
    // بدّل حالة مصباح LED الأخضر
  }
}

لا تعيق المهمتان إحداهما الأخرى أبدًا. يمكنك إضافة مهمة ثالثة ورابعة بالطريقة نفسها: مجموعة واحدة من المتغيرات وعبارة if واحدة لكل منها.

لا تشارك أبدًا متغيرًا واحدًا للوقت الأخير بين مهمتين. فالمهمة الأسرع تعيد ضبطه كثيرًا، لدرجة أن المهمة الأبطأ لا تبلغ فترتها أبدًا.

challenge icon

التحدي

سهل

يومض مؤشر LED الأحمر على المنفذ 13 بالفعل كل 500 ms. اجعل مؤشر LED الأخضر على المنفذ 12 يومض كل 200 ms في الوقت نفسه:

  • أضف المتغيرين greenPrevious وgreenState
  • أضف عبارة if ثانية في loop() لمؤشر LED الأخضر

اضغط على Run وشاهد المؤشرين يومضان، ثم اضغط على Check.

جرّب بنفسك

const int redLed = 13;
const int greenLed = 12;

unsigned long redPrevious = 0;
int redState = LOW;

// أضف هنا المتغيرين الخاصين بمصباح LED الأخضر

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
}

void loop() {
  unsigned long now = millis();

  // تتغير حالة مصباح LED الأحمر كل 500 ms
  if (now - redPrevious >= 500) {
    redPrevious = now;
    if (redState == LOW) {
      redState = HIGH;
    } else {
      redState = LOW;
    }
    digitalWrite(redLed, redState);
  }

  // اجعل حالة مصباح LED الأخضر تتغير هنا كل 200 ms
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التوقيت دون delay

تدرّب بنفسك: Playground لـ Arduino