تذكّر الوضع
جزء من قسم التوقيت دون delay في رحلة Arduino على Coddy. الدرس 7 من 18.
تستمر ضغطة الزر لجزء من الثانية، لكن ما تبدأه قد يستمر مدة أطول بكثير. لكي يتابع البرنامج عمله بعد ترك الزر، يجب أن يتذكر ما يفعله. يُسمّى المتغير المخصّص لذلك حالة أو نمطًا:
int mode = 0; // 0 = إيقاف، 1 = وميضقسّم loop() إلى جزأين. أولًا، لا تغيّر المدخلات سوى النمط. ثم ينفّذ الجزء المتبقي من الحلقة ما يحدده النمط:
// 1. المدخلات تغيّر الوضع
if (digitalRead(blinkButton) == LOW) {
mode = 1;
}
// 2. الوضع يحدّد ما يحدث
if (mode == 1) {
// اجعل الضوء يومض باستخدام millis()
} else {
digitalWrite(ledPin, LOW);
}يمثّل كل رقم شيئًا واحدًا يمكن للبرنامج فعله. اكتب في تعليق ما يعنيه كل رقم. يمكن أن يحتوي البرنامج على أي عدد يحتاج إليه من الأنماط: 0 و1 و2 و3 والمزيد.
التحدي
سهلالزر الأخضر موصول بالمنفذ 2، والأحمر بالمنفذ 3.
- يضبط الزر الأخضر
modeعلى 1، ويضبطه الزر الأحمر على 0 - عندما تكون قيمة
modeهي 1، يومض مؤشر LED على المنفذ 13 باستخدامmillis()، لمدة 500 ms مضاءً و500 ms منطفئًا - عندما تكون قيمة
modeهي 0، يكون مؤشر LED مطفأً
اضغط على Run، ثم اضغط على الزر الأخضر واتركه، ثم اضغط على الزر الأحمر. بعد ذلك اضغط على Check.
جرّب بنفسك
const int ledPin = 13;
const int blinkButton = 2; // أخضر
const int offButton = 3; // أحمر
int mode = 0; // 0 = مطفأ، 1 = يومض
unsigned long previousMillis = 0;
int ledState = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(blinkButton, INPUT_PULLUP);
pinMode(offButton, INPUT_PULLUP);
}
void loop() {
// 1. الأزرار تغيّر mode فقط
// 2. ثم نفّذ ما يحدده mode
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التوقيت دون delay
تدرّب بنفسك: Playground لـ Arduino