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

الوميض عند تبديل حالة زر

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

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

الوميض هو نمط millis(). أما الزر فيستخدم فحص الحافة من قسم المدخلات: تصرّف عندما يكون الزر مضغوطًا الآن ولم يكن مضغوطًا في الدورة السابقة. تعني ! «ليس»، لذا تُقرأ !wasPressed «لم يكن مضغوطًا».

bool wasPressed = false;

void loop() {
  // الوميض: if (now - previous >= 500) { ... }

  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed && !wasPressed) {
    // تم الضغط على الزر للتو
  }
  wasPressed = pressed;
}

ضع الجزأين في loop()، واحدًا بعد الآخر، ولا تستخدم delay() في أيٍّ منهما. إذا انتظر الوميض 500 ms، فلن تُلاحظ ضغطة تبدأ وتنتهي أثناء الانتظار.

challenge icon

التحدي

متوسط

اجعل اللوحة تنفّذ أمرين في الوقت نفسه:

  • يبدّل مصباح LED الأحمر على المنفذ 13 حالته كل 500 ms، باستخدام millis()
  • كل ضغطة على الزر تبدّل مصباح LED الأصفر على المنفذ 12: تشغيل، ثم إيقاف، ثم تشغيل

يجب أن تعمل الضغطة السريعة في أي وقت، كما يجب أن يؤدي الضغط المستمر على الزر إلى تبديل مصباح LED الأصفر مرة واحدة فقط. اضغط Run، ثم اضغط الزر، ثم Check.

جرّب بنفسك

const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;

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

void loop() {
  // 1. بدّل حالة مصباح LED الأحمر كل 500 ms باستخدام millis()

  // 2. كل ضغطة على الزر تشغّل مصباح LED الأصفر أو تطفئه
}
quiz iconاختبر نفسك

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

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

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