مقاومة السحب الداخلية إلى الأعلى
جزء من قسم المدخلات في رحلة Arduino على Coddy. الدرس 3 من 22.
لقد استخدمت INPUT_PULLUP منذ درس قراءة زر. فهو يشغّل مقاومة داخل اللوحة، تتراوح قيمتها بين 20k و50k أوم، من الطرف إلى 5V: أي إن مقاومة السحب لأسفل من الدرس السابق وُجّهت في الاتجاه المعاكس، من دون أي مكوّن إضافي. الزر لا يصل الطرف إلا بـ GND.
لكن المشكلة هي أن المنطق معكوس: عند عدم الضغط يقرأ HIGH، وعند الضغط يقرأ LOW، ومن السهل أن تكتب == LOW بالعكس في كل مكان في البرنامج. المقارنة مثل digitalRead(2) == LOW تكون بحد ذاتها true أو false، وbool هو متغير يحتفظ بقيمة true أو false. خزّنها تحت اسم يعبّر عن معناها:
bool pressed = digitalRead(2) == LOW;
if (pressed) {
// الزر مضغوط
}من هنا فصاعدًا، تُقرأ الشيفرة بالاتجاه الصحيح. تؤدي طباعة bool إلى إظهار 1 للقيمة true و0 للقيمة false.
التحدي
سهليوصل الزر الطرف 2 بـ GND، ويكون مصباح LED على الطرف 13:
- اضبط الطرف 2 على
INPUT_PULLUP - خزّن
digitalRead(buttonPin) == LOWفي متغير من النوعboolاسمهpressed - اطبع
pressed، وأضئ مصباح LED عندما تكون قيمتهtrue، ثم انتظر 100 ms
يتوقع Check القيمة 1 أثناء الضغط على الزر، والقيمة 0 عند تركه. اضغط Run، واستمر في الضغط على الزر، ثم اضغط Check.
جرّب بنفسك
const int buttonPin = 2;
const int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
// فعّل مقاومة الرفع على طرف الزر
}
void loop() {
// bool pressed = ...
// اطبع قيمته، وأضئ مصباح LED ما دامت قيمته true، وانتظر 100 ms
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المدخلات
1الأزرار
عرض حالة الزرمقاومة السحب إلى الأسفلمقاومة السحب الداخلية إلى الأعلىالتبديل عند كل ضغطةعدّ ضغطات الزرإزالة ارتداد الزراستخدام زرين في الوقت نفسهتدرّب بنفسك: Playground لـ Arduino