السلام عليكم ورحمة الله وبركاته
إن شاء الله تكونوا في تمام الصحة والعافية إخواني
في هذا الدرس الثاني إخواني بإذن الله
حنقوم عمل نفس montage المشروع الأول كما في الصورة (يعني لن نحتاج لشرح جزء الهاردوير) ، لكن حنقوم
بإستعمال كود مختلف لنجعل المصباح يقوم بإضائة إشارة النجدة
S.O.S المتفق عليها عالميا .
هذه الإشارة على شكل رموز مشفرة تحتوي على حروف وأرقام مع إستعمال أنماط مختلفة من
ON و
OFF فحنقوم إذا بجعل المصباح مضيء وطافئ في أنماط محددة .
بالنسبة لشكل
S.O.S هي عبارة عن :
3 إشارات ضوئية قصيرة تليها 3 إشارات ضوئية طويلة ، تليها 3 إشارات ضوئية قصيرة .
لإضائة المصباح وإطفائه أي جعله مرة
ON ومرة
OFF على هذا النمط ليشير إلى
S.O.S حنستعمل الكود project2.ino موجود في المرفقات . قم بإنشاء سكاتش جديد وإنسخ الكود ثم إضغط على verify لفحص الكود من الأخطاء ثم إرسله للكارد
أردينو . إذا كان كل شيء تمام حتشوف المصباح يشير إلى إشارة النجدة
S.O.S
ثم ينتظر 5 ثواني ثم يعيد الكرة .
طيب نستطيع أيضا أن نركب باطرية إلى الأردينو(ذلك لأن الأردينو يوفر فقط 5 فولت فقط عبر USB مع الكمبيوتر) مع مصباح
يضيء ضوء ساطع ونضع المصباح داخل صندوق محمول و مضاد للماء .
ويمكن إستعمال ذلك للتنفيذ إشارة النجدة
S.O.Sفي الحالات الطارئة
بإضائة قوية كالتي تستعمل في الجبال ، أو في القوارب ...إلخ.
شرح الكود
بالنسبة للقسم الأول من الكود كنا قد شفنا مثيله في المشروع السابق عندما قمنا بتعريف متغير ووضعنا
المنفذ 10 ك (output)
في كود الوضيفة
main loop لدينا نفس النوع من التعريفات لجعل المصباح مرة
on ومرة
off لمدة زمنية محددة .
ولكن الآن التعريفات موجودة في 3 بلوكات مفصولة عن بعض .
==> ناتج البلوك الأول هو إشارات ضوئية قصيرة - الكود:
-
for (int x=0; x<3; x++) {
digitalWrite(led, HIGH);
delay(150);
digitalWrite(led, LOW);
delay(100);
}
نشوف أن المصباح يبقى
on (أي مضيئ) لمدة
150 ms ثم يصبح
off (أي طافئ) لمدة
100 ms نشوف أيضا أن هذه التعريفات موضوعة بين مجموعة من الأقواس المعقوفة أي
{} وذلك يعني أنها في 3 بلوكات منفصلة عن بعض
لكن عند تشغيل السكاتش أي الكود نلاحظ أن المصباح يعيد مجموعة الإشارات الضوئية في هذا البلوك 3 مرات لا مرة فقط .
وذلك لأننا إستعملنا الحلقة التكرارية
for التي تجعل الكود الموجود في البلوك ينفذ 3 مرات .
نحتاج إلى 3 برامترات لإعطائها إلى حلقة التكرار
forوهم كالآتي :
البداية ،الشرط ،قيمة التزايد البداية هي أول بارامتر ينفذ وينفذ مرة واحدة فقط .
يتم فحص
الشرط كل مرة من بداية
for إلى نهايتها فإذا كان
True أي صحيح , إذا يتم تنفيذ التعريفات التي في البلوك وتنفيذ بارامتر
الزيادة أيضا ثم يتم فحص
الشرط مرة أخرى . عندما يصبح
الشرط Falseأي خاطئ يتم
مغادرة حلقة التكرار
for .
فأولا يجب علينا تهييئ متغير كنقطة بداية لحلقة التكرار
for.
في هذا المثال هيئنا المتغير
x بالقيمة 0
- الكود:
-
int x=0;
ثم وضعنا
الشرط لتحديد كم من مرة يتم تنفيذ الكود داخل حلقة
التكرار
for - الكود:
-
x<3;
في هذا المثال سيتكرر الكود كلما كان
x أصغر من 3 (3>x)
العلامة
> هي علامة مقارنة . وتستعمل علامات المقارنة داخل الكود لعمل القرارات ولمقارنة قيمتين .
علامات المقارنة هي كالآتي :
== ( يساوي ل)
=! (لا يساوي ل)
> (أصغر من)
< (أكبر من)
=> (أصغر من أو يساوي ل)
=< (أكبر من أو يساوي ل)
في الكود تبعنا قمنا بمقارنة
xمع القيمة 3 لنشوفها إذا كانت أصغر من 3 .
إذا كانت أصغر من 3 فيقوم الكود الذي في البلوك
بتكرار التنفيذ مرة أخرى
ثم في الآخر لدينا
x++ هذه إستعملناها لجعل قيمة
x تزداد ب 1 .وهي إختصار ل
x = x + 1 ننوه هنا أنه لاداعي إلى إضافة العلامة
; طيب خلاصة الأمر .
حلقة
for هيئت المتغير
x
بالقيمة 0 ، ثم شغلت الكود الذي داخل البلوك أي بين
{} ثم زادت من مقدار
x (في هذه الحالة زادت 1 إلى x )
وفي الآخير فحصت
الشرط وهو
x<3 فإذا كان
صحيح تقوم بالتكرار .
طيب الآن بعد ماشفنا كيف تعمل
الحلقة التكرارية نشوف أنه يوجد
في الكود 3 حلقات تكرارية.
لديا حلقة تكرر 3 مرات وتعرض لنا كل مرة 3 إشارات ضوئية قصيرة . ثم لدينا حلقة تكرر 3 مرات وتعرض لنا كل مرة 3 إشارات ضوئية طويلة . لديا حلقة تكرر 3 مرات وتعرض لنا كل مرة 3 إشارات ضوئية قصيرة مرة أخرى . يجب التنويه على شيء وهو أن
المتغير x يعتبر
متغير محلي . (local)وهذا يعني أنه يراه إلا الكود الموجود
ضمنه داخل البلوك. إلا في حالة قمنا بتعريفه قبل الوضيفة
()setup ففي هذة الحالة يعتبر
متغير شامل (global) ويمكن أن يراه
كل كود السكريبت أو البرنامج .
ولدينا بعد كل حلقة تكرار أيضا
delay لتوضيح الوقفة القصيرة
بين حروف
SOS آخيرا الكود ينتظر 5 ثواني قبل أن يعيد التنفيذ
main loop من الأول مرة أخرى
لاتنسوني من صالح دعاؤكم