الإعداد · الدرس 1.5
وميض LED وإضافة المكتبات
العودة إلى الدروسنظرة عامة ومبدأ التجربة
ستتعلم برمجة لوحة أردوينو (UNO R3 Board) لجعل LED المدمج يومض، وخطوات رفع البرنامج الأساسية. وستتعلم إضافة المكتبات لتوسيع وظائف Arduino واستخدام دوالها في الدروس اللاحقة بسهولة.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3) واحدة.
المبدأ
توجد صفوف موصلات على جانبي اللوحة لتوصيل الأجهزة الإلكترونية ولوحات التوسعة Shield. كما يوجد LED مدمج يمكن التحكم فيه من البرامج، ويعرف باسم L لأن هذه العلامة مطبوعة على اللوحة.

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

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

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

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


تعرض 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 وافتحه. توجد حزمة المكتبة المضغوطة في مجلد الدرس الذي يستخدمها. ولإضافة مكتبة درس 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. بذلك يكتمل تثبيت المكتبة.