الوميض عند تبديل حالة زر
جزء من قسم التوقيت دون 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، فلن تُلاحظ ضغطة تبدأ وتنتهي أثناء الانتظار.
التحدي
متوسطاجعل اللوحة تنفّذ أمرين في الوقت نفسه:
- يبدّل مصباح 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 الأصفر أو تطفئه
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التوقيت دون delay
1millis()
ساعة millis()الأوقات بصيغة unsigned longالوميض دون تأخيرمصباحا LED بسرعتين مختلفتينالوميض عند تبديل حالة زرمصباح يعمل بمؤقّتتدرّب بنفسك: Playground لـ Arduino