الإعداد · الدرس 1.5

وميض LED وإضافة المكتبات

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

نظرة عامة ومبدأ التجربة

ستتعلم برمجة لوحة أردوينو (UNO R3 Board) لجعل LED المدمج يومض، وخطوات رفع البرنامج الأساسية. وستتعلم إضافة المكتبات لتوسيع وظائف Arduino واستخدام دوالها في الدروس اللاحقة بسهولة.

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

المبدأ

توجد صفوف موصلات على جانبي اللوحة لتوصيل الأجهزة الإلكترونية ولوحات التوسعة Shield. كما يوجد LED مدمج يمكن التحكم فيه من البرامج، ويعرف باسم L لأن هذه العلامة مطبوعة على اللوحة.

لوحة أردوينو (UNO R3 Board) وموضع LED المدمج
لوحة أردوينو (UNO R3 Board) وموضع LED المدمج

قد تجد LED يومض عند توصيل USB؛ لأن اللوحات تشحن عادة مع مثال Blink مثبت مسبقًا. سنعيد برمجتها بنسخة خاصة ثم نغير سرعة الوميض.

بعد إعداد IDE والتأكد من المنفذ التسلسلي في درس الإعداد، حان اختبار الاتصال ببرمجة اللوحة. تحتوي IDE على أمثلة عديدة، ومنها مثال وميض L. افتح Blink من File → Examples → 01.Basics.

فتح مثال Blink

قائمة فتح مثال Blink
قائمة فتح مثال Blink

كبّر نافذة المثال حتى ترى البرنامج كاملًا. أمثلة IDE للقراءة فقط: يمكنك رفعها إلى UNO R3، لكن لا يمكنك حفظ التعديلات فوق ملف المثال نفسه.

حفظ نسخة خاصة

لأننا سنعدل المثال، احفظ نسخة أولًا. اختر File → Save As واحفظه باسم MyBlink.

حفظ نسخة MyBlink من مثال Blink
حفظ نسخة MyBlink من مثال Blink

ستجد النسخة في دفتر البرامج Sketchbook، ويمكن فتحها لاحقًا عبر File → Open Recent.

قائمة البرامج المفتوحة حديثًا
قائمة البرامج المفتوحة حديثًا

اختيار اللوحة والمنفذ

وصّل Arduino بالحاسوب بكابل توصيل (USB Cable)، وتحقق من Board Type و Serial Port.

اختيار نوع اللوحة
اختيار نوع اللوحة
اختيار المنفذ التسلسلي
اختيار المنفذ التسلسلي

تعرض IDE إعدادات اللوحة الحالية أسفل النافذة.

شريط إعدادات اللوحة في IDE
شريط إعدادات اللوحة في IDE

رفع البرنامج ومعالجة خطأ الاتصال

بعد توصيل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable) واختيار نوعها والمنفذ التسلسلي الصحيح، اضغط Upload (رفع)، وهو الزر الثاني من اليسار في شريط أدوات Arduino IDE. ينقل هذا الزر البرنامج من الحاسوب إلى ذاكرة اللوحة لتشغيله عليها. يعرض شريط الحالة تقدم العملية ورسائلها. أولًا تظهر Compiling Sketch لتحويل البرنامج إلى صيغة مناسبة للوحة، ثم Uploading لنقله إليها. أثناء النقل تومض مؤشرات اللوحة، وفي النهاية تظهر Done.

زر رفع البرنامج
زر رفع البرنامج
مرحلة ترجمة البرنامج
مرحلة ترجمة البرنامج
مرحلة الرفع
مرحلة الرفع
اكتمال الرفع ورسالة استهلاك الذاكرة
اكتمال الرفع ورسالة استهلاك الذاكرة

توضح رسالة المثال أن البرنامج يستخدم 930 بايتًا من أصل 32,256 بايتًا متاحة. بعد الرفع تعيد اللوحة التشغيل ويبدأ LED بالوميض.

إذا ظهرت رسالة الخطأ المعروضة بعد مرحلة Compiling Sketch، فقد تكون اللوحة غير متصلة، أو برنامج التشغيل غير مثبت، أو المنفذ المختار غير صحيح. ارجع إلى درس إعداد بيئة التطوير وتحقق من التثبيت.

رسالة خطأ اتصال اللوحة
رسالة خطأ اتصال اللوحة

التعليقات والدالة setup

جزء كبير من المثال تعليقات، وهي شرح للبرنامج وليست تعليمات منفذة. يتجاهلها المترجم ولا ينقلها إلى المتحكم، فلا تستهلك ذاكرة Flash الخاصة به. تساعدك على فهم البرنامج أو تذكر عمله، وتشرح للآخرين طريقة تشغيله.

يبدأ البرنامج بتعليق يذكر أن Blink يشغل LED ثانية ويطفئه ثانية بصورة متكررة، وأن المثال متاح للاستخدام العام، مع الرابط http://www.arduino.cc/en/Tutorial/Blink.

التعليقات

التعليق أحادي السطر يبدأ بـ // وينتهي تلقائيًا بنهاية السطر؛ يتجاهل المترجم ما بعده. يبدأ التعليق متعدد الأسطر بـ /* وينتهي بـ */، ويمكن أن يمتد على عدة أسطر.

setup()

تستدعى setup() عند بدء البرنامج لتهيئة المتغيرات وأوضاع المنافذ والمكتبات وغيرها. تعمل مرة واحدة بعد تشغيل الطاقة أو إعادة الضبط. وفي Blink تهيئ منفذ LED خرجًا:

مقتطف من الشرح
// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED_BUILTIN, OUTPUT);

}

الأقواس والدالة loop

الأقواس المعقوفة

الأقواس { و } جزء أساسي من C++ وتستخدم في تراكيب مختلفة؛ وقد تربك المبتدئ. يجب أن يقابل كل قوس فتح قوس إغلاق، أي أن تكون الأقواس متوازنة. يؤدي عدم التوازن إلى رسائل ترجمة يصعب تتبعها خصوصًا في البرامج الكبيرة. ونقل قوس سطرًا أو سطرين قد يغير معنى البرنامج بشدة.

توفر IDE وسيلة لفحص التوازن: حدد القوس أو ضع مؤشر الكتابة بعده مباشرة لتضيء الأقواس المتقابلة.

loop()

بخلاف setup() التي تعمل مرة واحدة، تتكرر loop() باستمرار. ويجب أن يحتوي البرنامج على هذه الدالة.

مقتطف من الشرح
// the loop function runs over and over again forever

void loop() {

  digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)

  delay(1000); // wait for a second

  digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW

  delay(1000); // wait for a second

}

تكتب digitalWrite(Pin num, HIGH/LOW) قيمة HIGH أو LOW إلى منفذ رقمي. إذا هيئ المنفذ OUTPUT بواسطة pinMode()، تكون القيمة HIGH مساوية لـ 5V و LOW مساوية لـ 0V، أي الأرضي، وفق اللوحة المستخدمة في هذا الدرس.

توقف delay(ms) البرنامج للمدة المحددة بالملي ثانية. كل ثانية تساوي 1000 ملي ثانية. المعامل ms من النوع unsigned long، ومداه على UNO من 0 إلى 4294967295.

تغيير الوميض والمكتبات

تبدأ أوامر loop() بتشغيل LED بقيمة HIGH، ثم تنتظر 1000 ملي ثانية، وتطفئه، وتنتظر ثانية أخرى.

لجعل الوميض أسرع مرتين، غير معامل delay() من 1000 إلى 500. تصبح كل مهلة نصف ثانية بدلًا من ثانية. اضغط Upload (رفع) في Arduino IDE لنقل النسخة المعدلة إلى لوحة أردوينو (UNO R3 Board)، ثم لاحظ سرعة الوميض.

ما هي المكتبات؟

بعد إتقان البرنامج والدوال المدمجة، يمكنك توسيع الإمكانات بمكتبات إضافية. المكتبة مجموعة أكواد تسهل الاتصال بالحساسات والشاشات والوحدات وغيرها؛ فمكتبة LiquidCrystal المدمجة تسهل التعامل مع شاشات LCD النصية. توجد مكتبات إضافية كثيرة للتنزيل، ويضم المرجع قائمة بالمكتبات المدمجة وبعض المكتبات الإضافية. يجب تثبيت المكتبات الإضافية قبل استخدامها.

الطريقة الأولى: استيراد مكتبة ZIP

تُوزَّع المكتبات عادة في ملف ZIP أو مجلد يحمل اسم المكتبة ويضم ملفات .cpp و .h، وغالبًا keywords.txt ومجلد examples وملفات أخرى. بدءًا من الإصدار 1.0.5، تدعم IDE تثبيت مكتبات الطرف الثالث. اترك الملف المضغوط كما هو لهذه الطريقة.

في IDE اختر Sketch → Include Library ثم Add.ZIP Library.

اختيار ملف المكتبة

قائمة إضافة مكتبة ZIP
قائمة إضافة مكتبة ZIP

تظهر نافذة اختيار المكتبة؛ انتقل إلى مكان ملف ZIP وافتحه. توجد حزمة المكتبة المضغوطة في مجلد الدرس الذي يستخدمها. ولإضافة مكتبة درس DHT11 مثلًا: انتقل إلى مجلد الدرس المطلوب ثم اختر الحزمة المضغوطة.

اختيار ملف مكتبة من مجلد الدرس
اختيار ملف مكتبة من مجلد الدرس

التحقق من التثبيت ومدير المكتبات

ارجع إلى Sketch → Import Library. تظهر المكتبة في آخر القائمة وتصبح جاهزة للاستخدام. تفك IDE الملف إلى مجلد libraries داخل مجلد برامج Arduino.

ظهور المكتبة المثبتة في القائمة
ظهور المكتبة المثبتة في القائمة

الطريقة الثانية: مدير المكتبات

يمكن استخدام مدير المكتبات في إصدار IDE 1.8.9 الموضح في هذه الدورة. افتح Sketch → Include Library → Manage Libraries. يعرض المدير المكتبات المثبتة والمتاحة. يستخدم الشرح مكتبة Audio مثالًا؛ ابحث عنها ثم اختر النسخة المطلوبة. قد توجد نسخة واحدة فقط، وعندها يكون عدم ظهور اختيار الإصدار طبيعيًا.

قائمة فتح مدير المكتبات
قائمة فتح مدير المكتبات

قد تحتاج إلى الانتظار؛ حدّث القائمة وانتظر إذا استغرق تحميلها وقتًا.

تثبيت المكتبة من المدير

مدير المكتبات وزر التثبيت
مدير المكتبات وزر التثبيت

اضغط Install وانتظر اكتمال التثبيت؛ يعتمد زمن التنزيل على سرعة الاتصال. عند الانتهاء تظهر علامة Installed بجوار المكتبة التي اخترتها. يمكنك بعدها إغلاق المدير.

علامة اكتمال تثبيت المكتبة
علامة اكتمال تثبيت المكتبة

ستجد المكتبة الجديدة في Include Library. ولإضافة مكتبتك إلى القائمة، افتح طلبًا (Issue) في مستودع GitHub الخاص بفهرس المكتبات.

هاتان الطريقتان الأكثر شيوعًا، وتطبقان بصورة مشابهة على Mac و Linux. الطريقة اليدوية التالية بديل أقل استخدامًا، ويمكن تجاوزها إذا لم تحتج إليها.

التثبيت اليدوي

أغلق Arduino أولًا ثم فك ZIP الخاص بالمكتبة. إذا كانت المكتبة ArduinoParty، فك ArduinoParty.zip. يجب أن ينتج مجلد ArduinoParty، وفيه ArduinoParty.cpp و ArduinoParty.h. إذا كانت الملفات دون مجلد، أنشئ مجلد ArduinoParty وانقل جميع ملفات الحزمة إليه.

انقل مجلد ArduinoParty إلى مجلد مكتباتك. في Windows يكون غالبًا My Documents/Arduino/libraries، وفي Mac يكون Documents/Arduino/libraries، وفي Linux مجلد libraries داخل Sketchbook.

البنية المطلوبة في Windows:

مقتطف من الشرح
My Documents/Arduino/libraries/ArduinoParty/ArduinoParty.cpp

My Documents/Arduino/libraries/ArduinoParty/ArduinoParty.h

My Documents/Arduino/libraries/ArduinoParty/examples

وفي Mac و Linux:

مقتطف من الشرح
Documents/Arduino/libraries/ArduinoParty/ArduinoParty.cpp

Documents/Arduino/libraries/ArduinoParty/ArduinoParty.h

Documents/Arduino/libraries/ArduinoParty/examples

قد توجد ملفات أخرى غير .cpp و .h؛ تأكد من وجودها جميعًا. لا تضع هذه الملفات مباشرة في libraries، ولا تضف مستوى مجلد زائدًا. مثلًا، المساران Documents/Arduino/libraries/ArduinoParty.cpp و Documents/Arduino/libraries/ArduinoParty/ArduinoParty/ArduinoParty.cpp لا يعطيان البنية الصحيحة.

أعد تشغيل Arduino وتحقق من ظهور المكتبة في Sketch → Import Library. بذلك يكتمل تثبيت المكتبة.

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

ملفات الدرس

100%

عرض الصورة

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