تعلم الوحدات · الدرس 2.3

المداخل الرقمية

العودة إلى الدروس

نظرة عامة وأزرار الضغط (Push Switch)

ستستخدم أزرار الضغط (Push Switch) مع المداخل الرقمية لتشغيل LED وإطفائه. يشغله زر ويطفئه الآخر.

المكونات المطلوبة

زر الضغط (Push Switch)

المفتاح مكون بسيط يصل نقطتي تماس عند الضغط على الزر أو تحريك الذراع، فيمر التيار. للمفتاح الصغير هنا أربع أرجل، لكن مجموعتين كهربائيتين فقط: B و C متصلان داخليًا، وكذلك A و D.

أطراف زر الضغط (Push Switch) ومخطط التوصيل الداخلي
أطراف زر الضغط (Push Switch) ومخطط التوصيل الداخلي

توصيل الدائرة

المخطط الكهربائي

دائرة LED والزرين
دائرة LED والزرين

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

توصيل UNO ولوحة التجارب (Breadboard) مع LED والزرين
توصيل UNO ولوحة التجارب (Breadboard) مع LED والزرين

رغم أن جسم المفتاح مربع، تمتد أرجله من جهتين متقابلتين؛ لذلك يجب تركيبه في الاتجاه الصحيح على لوحة التجارب (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);
  }
}

ملفات الدرس والمكتبات

ملفات الدرس

100%

عرض الصورة

استخدم + و− للتكبير والتصغير، أو اضغط Esc للإغلاق.