مصباح يعمل بمؤقّت
جزء من قسم التوقيت دون delay في رحلة Arduino على Coddy. الدرس 6 من 18.
يضيء مصباح الدرج عند الضغط على زره، ثم ينطفئ من تلقاء نفسه بعد قليل. اضغط عليه مرة أخرى أثناء إضاءته، وسيبدأ احتساب الوقت من جديد.
يتطلب ذلك أمرين: لحظة آخر ضغطة، وما إذا كان المصباح مضاءً. خزّن اللحظة في unsigned long عندما يكون الزر مضغوطًا:
if (digitalRead(buttonPin) == LOW) {
pressedAt = millis(); // ابدأ حساب الوقت (أو أعد حسابه من البداية)
lightOn = true;
digitalWrite(ledPin, HIGH);
}ثم تحقّق في كل دورة من المدة التي انقضت:
if (lightOn && millis() - pressedAt >= onTime) {
lightOn = false;
digitalWrite(ledPin, LOW);
}لا ينتظر أيٌّ من الجزأين، لذلك تُلتقط الضغطة في أي لحظة، حتى عندما يكون المصباح مضاءً بالفعل. إذا استخدمت delay(2000) بعد الضغطة، فستُفقد أي ضغطة ثانية أثناء الانتظار.
التحدي
سهلأنشئ مصباحًا للدرج:
- تؤدي الضغطة إلى إضاءة LED على المنفذ 13 فورًا
- ينطفئ تلقائيًا بعد ثانيتين من الضغط
- تبدأ الضغطة أثناء إضاءته مدة الثانيتين من جديد
اضغط Run، واضغط الزر عدة مرات، ثم اضغط Check.
جرّب بنفسك
const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000; // المدة التي يظل فيها الضوء مضاءً
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// عند الضغط على الزر: شغّل LED وسجّل الوقت
// عندما تنقضي مدة onTime منذ ذلك الحين: أطفئ LED
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التوقيت دون delay
تدرّب بنفسك: Playground لـ Arduino