تعلم الوحدات · الدرس 2.3
المداخل الرقمية
العودة إلى الدروسنظرة عامة وأزرار الضغط (Push Switch)
ستستخدم أزرار الضغط (Push Switch) مع المداخل الرقمية لتشغيل LED وإطفائه. يشغله زر ويطفئه الآخر.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO).
- لوحة تجارب (Breadboard) ذات 830 نقطة.
- الصمام الباعث للضوء (LED) أحمر قطره 5mm.
- مقاومة (Resistor) 220Ω.
- زرا ضغط (Push Switch).
- سبعة أسلاك ذكر إلى ذكر (Male to Male Jumper Wires).
زر الضغط (Push Switch)
المفتاح مكون بسيط يصل نقطتي تماس عند الضغط على الزر أو تحريك الذراع، فيمر التيار. للمفتاح الصغير هنا أربع أرجل، لكن مجموعتين كهربائيتين فقط: B و C متصلان داخليًا، وكذلك A و D.

توصيل الدائرة
المخطط الكهربائي

التوصيل العملي

رغم أن جسم المفتاح مربع، تمتد أرجله من جهتين متقابلتين؛ لذلك يجب تركيبه في الاتجاه الصحيح على لوحة التجارب (Breadboard) حتى تكون الأرجل متباعدة بما يكفي. تذكر وضع رجل LED السالبة الأقصر إلى اليسار كما في الرسم.
رفع البرنامج وشرح المداخل
افتح ملف البرنامج Digital_Inputs.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها. يشغّل الزر الأيسر LED ويطفئه الأيمن.
تعرف بداية البرنامج ثلاثة متغيرات للمنافذ: ledPin للخرج، و buttonApin للمفتاح الأقرب إلى أعلى لوحة التجارب (Breadboard)، و buttonBpin للمفتاح الآخر.
تهيئ setup() منفذ LED بـ OUTPUT، والزرين بـ INPUT_PULLUP. يعني ذلك استخدام المنفذ دخلًا مع سحبه إلى HIGH عندما لا يسحبه اتصال خارجي إلى مستوى آخر. لذا تكون الحالة الافتراضية HIGH، وعند الضغط يسحب الزر المنفذ إلى LOW.
لهذا يوصل المفتاحان بـ GND. الضغط يصل المدخل بالأرضي فيخرج من حالة HIGH. ولأن الضغط يعطي LOW، يكون منطق القراءة معكوسًا قليلًا؛ وتتعامل loop() معه.
تحتوي loop() على جملتي if، واحدة لكل زر. تقرأ digitalRead() المدخل المناسب: إذا كان زر A في LOW، تكتب digitalWrite() قيمة HIGH إلى ledPin لتشغيله. وإذا ضغط B تكتب LOW لإطفائه.
if و digitalRead()
تفحص if الشرط وتنفذ التعليمة أو الكتلة إذا كانت نتيجته true. المعامل condition تعبير منطقي قد يكون true أو false.
if (condition) {
// statement(s)
}الصيغة digitalRead(pin)، حيث pin رقم منفذ Arduino المطلوب. تعيد HIGH أو LOW.
معامل المقارنة ==
يقارن المتغير يسار المعامل بالقيمة أو المتغير يمينه، ويعيد true إذا تساويا و false إذا اختلفا.
x == y;يمكن مقارنة أنواع مختلفة، لكن قد تنتج نتائج غير متوقعة. يُنصح باستخدام النوع نفسه، بما في ذلك كونه signed أو unsigned. x متغير، و y متغير أو ثابت؛ والأنواع الممكنة int و float و double و byte و short و long.
الكود
Digital_Inputs/Digital_Inputs.ino
//www.elegoo.com
//2016.12.08
int ledPin = 5;
int buttonApin = 9;
int buttonBpin = 8;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(buttonApin) == LOW)
{
digitalWrite(ledPin, HIGH);
}
if (digitalRead(buttonBpin) == LOW)
{
digitalWrite(ledPin, LOW);
}
}