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

مقاومة السحب الداخلية إلى الأعلى

جزء من قسم المدخلات في رحلة 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.

challenge icon

التحدي

سهل

يوصل الزر الطرف 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
}
quiz iconاختبر نفسك

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

جميع دروس المدخلات

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