مقدمة
في هذا الدرس، ستتعلم كيفية استخدام الازرار “push buttons” مع المدخلات الرقمية”digital inputs” لإضاءة وإطفاء الـLED.
بالضغط على زر الموجود في أعلى لوح التجارب سيتم إضاءة الـLED ، وبالضغط على الزر الآخر سيتم إطفاءه.
المواد والأدوات
2× ازرار (Tactile push switch)
1× لوحة التجارب (Half-size Breadboard)
1× اردوينو اونو
1× سلك اردوينو
استخدام الازرار Push Switches
استخدام الازرار يسهل الأمر في المشاريع، فعند الضغط عليه يقوم بتوصيل الدائرة.
الأزرار المستخدمة في هذا الدرس “مفاتيح اللمس – tactile switches” تمتلك أربعة موصلات
في الحقيقة هنالك موصلين اثنين كهربائية داخلها ( كما في الصورة) منفذ B ومنفذ c موصولة ببعضها كذلك الحال منفذ a ومنفذ D موصولة ببعض.
توصيل الدائرة
ستجد أن نهايات الازرار تسمح لك بتركيبها على لوح التجارب بسهولة.
يجب عليك تركيبها بحيث تكون الجهه السالبة (الأقصر) بإتجاه اليمين:
الكود البرمجي
ارفع الكود التالي إلى متحكم الأردوينو لتبدأ بالتعرف على طريقة استخدام الازرار. وبعد اكتمال الرفع ستجد أنه عند الضغط على الزر الموجد في أعلى لوح التجارب سيتم إضاءة الـLED وعند الضغط على الزر الآخر سيتم إطفاءه.
int ledPin = 5; int buttonApin = 9; int buttonBpin = 8; byte leds = 0; 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); } }
الجزء الأول من الكود يقوم بتعريف ثلاث متغيرات لثلاث منافذ سيتم استخدامها في الأردوينو.
‘ledPin’ هو منفذ المخرج و ‘buttonApin’ سيستخدم للزر الموجود في أعلى لوح التجارب و ‘buttonBpin’ سيستخدم للزر الآخر.
دالة ‘setup’ ستعرف متغير ‘ledPin’ كمخرج، ولكن سيكون أيضًا لديك مدخلين اثنين (لأجل استخدام الازرار) لذلك قم بإستخدام دالة ‘pinMode’ لإضافة خاصية ‘INPUT_PULLUP’ لكل زر كالتالي:
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
استخدامنا لـ INPUT_PULLUP يعني أن منفذ الإدخال للزر سيعطي قيمة 1 (قيمة عالية) إذا لم يتم الضغط عليه، بمعنى آخر القيمة الاساسية لمنفذ الإدخال للزر هي 1، وإذا تم الضغط على الزر فستعطي قيمة 0(قيمة منخفضة).
وهذا هو سبب ربط بـ GND . عند الضغط على الزر سيقوم الزر بتوصيل منفذ الإدخال إلى GND وعندها تكون القيمة منخفضة (0)
ولأنك قمت بوضع التصميم بهذه الطريقة، بمعنى أن قيمة الزر عالية ولكن عند الضغط عليه تكون منخفضة، أي العكس لذلك ستبرمجها داخل دالة ‘loop’:
void loop() { if (digitalRead(buttonApin) == LOW) { digitalWrite(ledPin, HIGH); } if (digitalRead(buttonBpin) == LOW) { digitalWrite(ledPin, LOW); } }
داخل دالة ‘loop’ هناك جملتين IF شرطية . جملة شرطية لكل زر تقوم بقراءة ‘digitalRead’ لمدخل الزر (لمعرفة الحالة اذا كانت عالية أو منخفضة).
لتتذكر دائمًا انه عند الضغط على الزر ستكون القيمة منخفضة لذلك سيتم تحقيق الشرط وسيتم اضاءة الـLED وذالك بإعطاء قيمة عالية (1) لـledPin.
كذلك الحال للزر الأخر (بجملة IF الشرطية الثانية)ولكن سيتم اطفاء الـLED لأننا قمنا بإعطاء قيمة منخفضة(0) لـledPin.
أنشطة أخرى
هناك أمرين يمكنك القيام بها عند استخدام الازرار:
أولاً، يمكنك استخدام ما تعلمته في الدرس السادس واضافة بعض الاوامر عليه؛ لتتمكن من إظهار القيمة على شاشة الاتصال التسلسلي Serial Monitor عند الضغط على الازرار.
عليك استخدام امر الطباعة على الشاشة في الكود داخل دالة loop لإظهار القيمة بالشاشة.
Serial.println(“Button A Pressed”);
كما عليك القيام باضافة وتعريف خدمة الاتصال التسلسلي وذلك عبر اضافة الكود داخل دالة setup:
while (!Serial); Serial.begin(9600);
ثانيًا، يمكنك تغيير الكود بحيث تستطيع اضاءة الـLED عند الضغط على الزر الموجود باعلى لوح التجارب وإطفاءه بشكل تلقائي بعد ثلاثين ثانية.