إن لم تكن اطلعت على الأجزاء اﻷولى من هذه السلسلة فسيكون صعبا عليك البدء من وسطها إلا إذا كانت لك دراية مسبقة ببرمجة الروبوتات.
لنبدأ
قم بفتح نفس الكود (الشيفرة) في الدرس السابق.
هذه الشيفرة عبارة عن نص مقروء يضم أوامر بسيطة محددة يستطيع الانسان قراءتها. بينما يقوم برنامج Arduino بتحويل الشيفرة إلى لغة آلة تستطيع البطاقة البرمجية Arduino قراءتها بينما تستعصي على الانسان، وهذا حال معظم لغات البرمجة في مجال علوم الحاسوب.
في الحقيقة، الشيفرات في البرنامج Arduino هي عبارة عن شيفرات مكتوبة باللغة البرمجية المعروفة C. لا يهم إذا كنت تجيدها أم لا، فقط تتبع الدرس وحاول فهم الشرح حتى تبدأ بفهما خطوة خطوة.
/******************************************************************************************* *****وميض***** *****************************************************************************************/ int ledPin = 13; //digital pin 13 // سيوصل الصمام الضوئي بالمربط الرقمي 13
void setup() //ستنفذ هذه الدالة مرة واحدة فقط وهي من أجل تهيئة البطاقة ﻻ حسب { pinMode(ledPin, OUTPUT); // سنستعمل المربط الرقمي كمخرج للصمام الضوئي }
void loop() //تنفذ هذه الدالة إلى ما ﻻ نهاية { digitalWrite(ledPin, HIGH); // اشعل الصمام الضوئي delay(1000); // انتظر ثانية واحدة digitalWrite(ledPin, LOW); // اطفإ الصمام الضوئي delay(1000); // انتظر ثانية واحدة } |
تحليل الشيفرة
التعليقات
التعليقات عبارة عن شرح يكتب في الشيفرات لتسهيل فهم اﻷوامر المكتوبة للإنسان. يقوم البرنامج بتجاهلها ﻷنها لا تهمه بل تهم الانسان فقط حينما يريد أن يطلع على الشيفرة ليفهم محتواها.
يبدأ كل تعليق بالرمز /* وينتهي بالرمز */، هذا في حالة كتابة نص كبير كمقدمة الشيفرة مثلا:
/***************************************************************************************** *****وميض***** شيفرة بسيطة تهذف إلى جعل الصمام الضوئي LED مشتعلا لثانية واحدة ثم يتم إطفاءه. نستعمل المربط الرقمي 13 في البطاقة البرمجية Arduino. http://www.arduino.cc/en/Tutorial/Blink *****************************************************************************************/ |
يوجد نوع آخر من التعليقات يبدأ بالرمز // ويكون مكتوبا في سطر واحد فقط.
//digital pin 13 // سيوصل الصمام الضوئي بالمربط الرقمي 13
//ستنفذ هذه الدالة مرة واحدة فقط وهي من أجل تهيئة البطاقة ﻻ حسب
// سنستعمل المربط الرقمي كمخرج للصمام الضوئي |
المتغيرات
int ledPin = 13; //digital pin 13 // سيوصل الصمام الضوئي بالمربط الرقمي 13 |
كما هو الشأن في الرياضيات حيث توجد عدة مجموعات للأعداد كمجموعة اﻷعداد الصحيحة الطبيعية ومجموعة اﻷعداد الحقيقية فكذلك الشأن في اللغة C.
تمثل مجموعة اﻷعداد الصحيحة في الرياضايات بالحرف N بينما تمثل في اللغة C بالرمز int وهي اختصار لكلمة انجليزية (integer) وتعني "صحيح” باللغة العربية.
كما تمثل مجموعة اﻷعداد الحقيقية في الرياضايات بالحرف R بينما تمثل في اللغة C بالكلمة الانجليزية float.
وبالتالي فإنه تم تعريف المتغير ledPin بأنه عدد صحيح وتمت تهيئته ليمثل العدد 13 (;int ledPin = 13).
الفاصلة المنقطة في نهاية كل سطر تعني نهاية اﻷمر. فمثلا سيوضع العدد 13 في المتغير ledPin وهذا ما نريده فقط في هذا السطر فننهيه بالفاصلة المنقطة ;
الدوال
تعتبران الدالتان setup و loop اﻷهم في برمجة الروبوتات. فاﻷولى تقوم بتهيئة البطاقة البرمجية بينما التالية يكرر النداء عليها إلى ما لانهاية.
void setup() { pinMode(ledPin, OUTPUT); } |
voidloop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } |
اقرا معي المثال التالي، وقل لي ما الذي فهمت منه:
شيء نظيف نظف( الشيء المتسخ ) { اجلب الصاوبون; افتح الصنبور; اسكب بعضا من الماء على الشيء المتسخ; انتظر 10 ثوان; اغلق الصنبور; مرر الصابون على الشيء المتسخ; افتح الصنبور; ضع الشيء المتسخ تحت الصنبور; انتظر 20 ثانية; اغلق الصنبور; ضع الشيء في مكان اﻷشياء النظيفة; } |
هل فهمت شيئا؟؟؟؟
كلما تريد أن تنظف شيئا متسخا تقوم بعملية "نظف”. تأخد الشي المتسخ وتمر عبر خطوات (أو أوامر) يتم من خلالها تمرير الشيء المتسخ عبر مراحل حتى يصبح شيئا نظيفا.
هذا المثال ببساطته يوضح مفهوم الدالة في البرمجة وكذلك في الرياضيات. ألا تسمع بين الفينة واﻷخرى أن روبوتا مثلا يقوم بطهي البيض أو بإطفاء الحرائق أو أو أو ….
لكل من الدالتين setup و loop مهمة خاصة.
الدالة setup تقوم بتهيئة البطاقة البرمجية في البداية أي بعملية التحضير.
تحضير ماذا؟ تحضير المربط رقم 13 بالبطاقة البرمجية Arduino حتى يستعمل كمخرج لا كمدخل.
توجد دالة معرفة عند البرنامج Arduino يتم استعمالها لتقوم بهذه المهمة،
نتكلم هنا عن pinMode، وهي اﻷمر الوحيد الذي يتم تنفيذه داخل الدالة setup.
أما الدالة loop (كرر باللغة العربية) فهي تقوم بتكرير المهام التالية إلى ما لا نهاية:
لا شيئ كرر( ) { اشعل الصمام الضوئي; انتظر ثانية واحدة; اطفإ الصمام الضوئي; انتظر ثانية واحدة; } |
طالما البطاقة البرمجية متصلة بالكهربائي فسيبقى الصمام الضوئي يشتعل وينطفأ إلى مالا نهاية.
تعديل الشيفرة
اﻵن حان الوقت لتظيف لمساتك بتغيير شيفرتنا لتقوم بمهام أخرى تحت رغبتك. أول شيء بسيط يمكنها تجريبه هو تعديل وقت إشعال وانطفاء الصمام الضوئي. قم بتغيير القيمة 1000 جزء من الثانية إلى 500 جزء من الثانية كالتالي:
void loop() { digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(500); } |
قم الآن بتنفيذ الشسفرة الجديدة بالنقر على Compile/Verify كما أشرنا أليها في الدرس السابق. بعدها حول الشيفرة إلى البطاقة البرمجية.
حينها من المفترض أن ترى وميضا للصمام الثنائي أسرع مما كان عليه. إذا حصل ولم ترى ما يسرك فتحقق من التالي:
هل البطاقة متصلة بالحاسوب؟
هل بالفعل غيرت القيمة 1000 إلى القيمة 500.
هل قمت بالنقر على Compile/Verify ؟
هل قمت بتحويل ناجح إلى البطاقة؟
تمارين
تمرين 1: قم بتغيير الشيفرة بحيث يشتعل الصمام الضوء 100 جزء من الثانية وينطفأ لمدة 900 جزء من الثانية.
تمرين 2: قم بتغيير الشيفرة بحيث يشتعل الصمام الضوء 50 جزء من الثانية وينطفأ لمدة 50 جزء من الثانية. ما هي النتيجة؟
تمرين 3:
قم بتغيير الشيفرة بحيث يشتعل الصمام الضوء 10 أجزاء من الثانية وينطفأ لمدة 10 أجزاء من الثانية. كيف أصبحت النتيجة؟
إذا كنت بالليل أطفأ ضوء الغرفة وقم بتحريك البطاقة Arduino يمينا ويسارا ثم انظر ماذا ترى.
ما هو تفسيرك لما حدث؟
التأليف
ترجمة محمد السهلي.
{jumi [*3]}
المراجع
http://www.ladyada.net/learn/arduino/lesson2.html
التعليقات
t3elem.blogspot.com/2014/07/arduino.html
مدونة t3elem دروس وتمارين و كتب للتعلم
t3elem.blogspot.com/