تعلم كتابة التعليقات داخل اكوادك وبرامجك وتعامل مع المعاملات وعرف الجملة الشرطية IF من خلال هذا الدرس
الدرس السابع
الدرس السابع
الاخوة
الكرام السلام عليكم ورحمة الله وبركاته
ماذا
يتناول هذا الدرس :
- كتابة التعليقات .
- بعض انواع المعاملات.
- الجمل الشرطية.
- الجملة الشرطية If.
====================
كتابة
التعليقات
ما
هي التعليقات ؟
هي
عبارة عن ملاحظات قوم بكتابتها بين اسطر
الكواد.
هل
تؤثر التعليقات علي البرنامج او الدائرة
الالكترونية ؟
لا
ليس لها علاقة فعليها بالكود او الدائرة
الالكترونية المستخدم فيها المتحكم .
اذا...
لماذا
انا احتاج الي استخدمها او حتي تعلمها ؟
بكل
بساطة انت من يحتاج التعليقات لذا يجب
عليك تعلمها .
طيب
ايه هي فوائد التعليقات ؟
- بتسهل عليك قراءة الكود في المستقبل .
- تساعد علي تنظيم الكود .
- تشرح الكود بشكل مبسط .
عاوز
اتعلمها طيب !
بس
كده من عنيا التلاتة (0
. ^)
بص
الكود ده كده
من
الكود اللي فات نلاحظ انه فيه طريقتين
لكتابة التعليقات ولو ملحظتش ارجع ولاحظ
الطريقة
الاولي :
عن
طريق تحديد بداية ونهاية التعليق ودي
بنستخدمها لما يكون التعليق سطر واحد او
اكتر من سطر وبنبداء بالرمز ده /*
وبننتهي
بالرمز ده */
زي
التعليق اللي مكتوب قبل الدالة الرئيسية
والتعليق القبل الاخير في الكود السابق
.
الطريقة
الثانية :
عن
طريق تحديد بداية بس والنهاية بتكون نهاية
السطر بنستخدمها لما يكون التعليق سطر
واحد بس وبنبداء بالرمز ده //
زي
الموجودة في التعليق الاخير واللي الثاني
في الكود السابق.
====================
بعض
انواع المعاملات
اولا
المعاملات الرياضية :
يوجد
المزيد من المعاملات الرياضية ولكن هنكتفي
بالكم ده دلوقتي
ثانيا
معاملات العلاقات :
هذه
النوعية من المعاملات تستخدم مع الجمل
الشرطية والحلقات التكرارية .
====================
الجمل
الشرطية
كثبرا
من الاحيان نحتاج لشروط لتستمر الحياة
فمثلا يقول والد اذا نجحت سوف افعل لك كذا
وكذا فهو يشتطر النجاح حتي يتم تحقيق كذا
وكذا (انا
عارف انه مش بيعمل حاجة)
.
نعرف
جميعا الحكمة القائلة "
من
جد وجد "
فهي
في حد ذاتها شرط .
حتي
في البرمجة لابد من وجود شروط كيف؟؟
انت
الان اصبحت مهندس الكترونيات عظيم وجالك
واحد قالك هديلك 35
جنية
وتعملي دائرة الكترونية لما اضغط علي
المفتاح الاول ماتور المياه يشتغل ولما
اضغط التاني التكييف يشتغل ولما اضغط
الثالث يولع في البيت مثلا ؟؟
طيب
دول 35
جنيه
مش
هتسيبه يمشي كده زعلان (مهما
كان دول 35
جنيه
!)
هنلاحظ
ان الراجل المنفس ده عاوز ثلاث ضواغط وكل
ضاغط له وظيفة معينة يتم تنفيذه عند الضغط
عليه .
تجيب
بقي ورقة وقلم وتكتب !
الشرط
الاول :
الضغط
علي المفتاح الاول .
مايتم
تنفيذه عند حدوث الشرط الاول :
تشغيل
ماتور.
الشرط
الثاني :
الضغط
علي المفتاح الثاني
مايتم
تنفيذه عند حدوث الشرط الثاني :
تشغيل
التكييف.
الشرط
الثالث :
الضغط
علي المفتاح الثالث
مايتم
تنفيذه عند حدوث الشرط الثالث :
يولع
في البيت.
طيب
هنفذ المشروع ده ازاي ؟؟
انا
اقولك :
الخطوة
الاولي .....
هيتم
استبدال الماتور والتكييف والبتاع اللي
بيولعوبوا في البيوت(محدش
يسال البتاع ده ايه!)
بالليدات
لكي يسهل محاكاته علي الكمبيوتر.
الخطوة
الثانية .....
هنكون
الدائرة دي علي برنامج ISIS
يتم
توصيل كل ضاغط بهذه الطريقة مثل مفتاح
الريست لو تفتكر :
الخطوة
الثالثة .....
هتعمل
مشروع وتكتب الكود ده فيه:
void main()
{
trisa=0b00000111;
trisb=0;
portb=0;
while (1){
if (porta.f0==0){portb.f0=1;}
if (porta.f1==0){portb.f1=1;}
if (porta.f2==0){portb.f2=1;}
portb=0;
}
}
شرح
الكود :
نشوف
ايه اللي بيحصل في الكود اللي فات
- عرفنا البورت A علي انه دخل .
- عرفنا البورت B علي انه خرج .
- استخدمنا جملة while وهي وظيفتها في الكود ده انها كل ما البرنامج يخلص تعيده تاني وليها وظائف تانية هنتعرف عليها الدرس الجي ان شاء الله بس خلينا في الوظيفة دي الاول وخليني اسالك ايه فيدة ان البرنامج يتعاد كل ما يخلص ؟ ما كانت هي مرة ونريح دماغنا !
اكتب
الاجابة في التعليق ...
في
انتظار الابداع !
- استخدمنا الجملة IF ثلاث مرات .
- بس ....
====================
الجملة
الشرطية If
ايه
ياعم الكروتة دي يعني ايه If
دي
اصلا؟؟
انا
اقولك if
منك
ومن فعلك ..
بص
ياسيدي
If
كلمة
انجليزية معناها "
لو
"
(إن
لو تفتح عمل الشيطان)
خلاص
اسمها "
اذا
"
تستخدم
if
لفرض
شرط ويتم تنفيذ اومر معينه في حالة تحقق
الشرط ....
طيب
ازاي
انا
اقولك
الصيغة
العامة لجملة if
كالتالي
- يمكن ان تحتوي منطقة الشرط علي مجموعة شروط.
- ومنطقة الاوامر علي مجموعة الاوامر التي يتم تنفيذه في حالة تحقق الشرط ولو متحققش يبقي مش هتتنفذ خالص.
- لازم تكون الاوامر داخل اقواس متعرجة { }.
مثال
من الكود السابق
{;if
(porta.f0==0){portb.f0=1
- الشرط هنا انه لو كان الطرف الاول من البورت A يساوي 0 اعمل كذا وكذا
اه
بس ثواني دي مش يساوي دول 2
يساوي
"=="
اه
ما احنا اتكلمنا عنها في معاملات العلاقات
عموما
==
دي
معناها مقارنة بين الطرف الايسر Porta.f0
بالطرف
الايمن 0.
اما
=
بس
دي معناها اجعل الطرف الايسر Porta.f0يساوي
الطرف الايمن 0.
لو
مش فاهم ارجع لمعاملات العلاقات .
- سؤال تاني ليه الشرط Porta.f0==0 مش ده Porta.f0==1 ؟؟
دي
ترجع لطريقة توصيل المفتاح
- لو وصلنا المفتاح بالطريقة دي :
هيكون
الشرط ده
Porta.f0==1
بس
طبعا الطريقة دي ليها مشاكل كتير في
التطبيق العملي فسيبك منها وخلينا في
الاولي ..
دلوقتي
اعطي لنفسك استراحة قصيرة وجرب البرنامج
اللي فات بالكود المكتوب
لازم
تجرب قبل ما تكمل الدرس
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ياعم
روح جرب البرنامج الاول وبعد كده ارجع
كمل الدرس مش هيطير
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
جربت
الكود
طيب
احلف كده
يعني
في عينك
لو
مجربتش الكود علشان خطري روح جربه الاول
.
.
.
هعتبرك
جربته لانك حلفات هنا بقي فيه سؤال ..
ليه
الكود مشتغلش طبيعي ؟؟!
هو
مشتغلش .....
مقولتلك
جربه مبتسمعش الكلام !
طيب
عموما جربه تاني وحاول تفكر فين المشكلة
...
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
انا
هقولك فين المشكلة
المشكلة
ان الليدات بتنور وتفصل باستمرار بمجرد
اني بقي دايس علي المفتاح.
روح
امسح السطر Portb=0;
اللي
موجود في اخر الكود يعني الكود هيبقي
بالشكل ده :
void main()
{
trisa=0b00000111;
trisb=0;
portb=0;
while (1){
if (porta.f0==0){portb.f0=1;}
if (porta.f1==0){portb.f1=1;}
if (porta.f2==0){portb.f2=1;}
}
}
جرب ولاحظ النتيجة
جرب
ولاحظ النتيجة
وفكر
ايه اللي حصل وهل فيه مشاكل تاني ؟؟
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
اللي
حصل ان الكود بقي شغال بس مش زي ما انا
عاوز
انا
بدوس علي المفتاح ينور الليد واول ما
بسيبه برضه بيفضل منور انا مش عاوز كده
انا عوزه اول ما اسيبه يطفي (احنا
كده هنحرق للراجل الموتور ولا ايه ؟)
طيب
انا هقولك الحل :
اكتب
الكود ده بدل اللي فات .........
void main()
{
trisa=0b00000111;
trisb=0;
portb=0;
while (1){
if (porta.f0==0){portb.f0=1;} else { portb.f0=0; }
if (porta.f1==0){portb.f1=1;} else { portb.f1=0; }
if (porta.f2==0){portb.f2=1;} else { portb.f2=0; }
}
}
ده
ايه ده بقي ده بقي ده ؟
بكل
بساطة دي صيغة تانية لجملة If
تعالي
نشرحها
{;if
(porta.f0==0)
{portb.f0=1;}
else
{
portb.f0=0
- الجزء اللي لحد اللون الاحمر احنا عرفينه صح ولا ايه ؟
- تمااااااااااااااااام.
- الجزء اللي بالون الاخضر else دي كلمة ممكن نكتبها بعد جملة if والامر اللي تيجي بعدها تتنفذ في حالة عدم تحقق الشرط .
يعني
كن معناها اذ لم يتحقق الشرط نفذ كذا وكذا
- طيب وايه اللي بلون الازرق ؟
- دي بقي الاومر اللي هيتم تنفيذها لو متحققش الشرط ولو البرنامج مش هيبصلها اصلاَ
- يعني ببساطة لو اتحقق الشرط اللي بالون الاصفر ده يتم تنفذ الاوامر اللي بالون الاحمر ولو متحققش يتم تنفيذ الاوامر اللي بالون الازرق .. صح
- الله ينور عليك ياكبير ... انت كده فله ..
بكده
نكون خلصنا درس النهاردة ومش فاضل غير
حاجات صغيرة
اول
حاجة ممكن تحمل ملف المشروع بتاع النهارده
من هنا
تاني
حاجة انا ليا طلب عندك
في
مشروع كده عاوزه منك
بص
المخطط ده الاول
احتاج
الي برنامج لهذه الدائرة عند القيام
بالضغط علي احد المفاتيح يضئ الليد الخاص
به كالتالي
الضعط
علي المفتاح الاول يضئ الليد الاول لمده
3
ثواني.
الضعط
علي المفتاح الثاني يضئ الليد الثاني
لمده 5
ثواني.
الضعط
علي المفتاح الثالث يضئ الليد الثالث
لمده 8
ثواني.
الضعط
علي المفتاح الرابع يضئ الليد الاول لمده
10
ثواني.
انتظر
الردود
شرح رائع الله يوفقك
ردحذفالسلام عليكم و رحمة الله و بركاته
حذفأستاذي العزيز (تعبتنا في البرنامج ده , دخت والله فيه بس من جد وجد أسلوب رائع فعلا أشكرك عليه جدا العملي مفيش أحسن منه يخليك تتعلم تمام )
الحمد لله بعد جهد و وقت تمكنت من تنفيذ طلبك و هذا الكود كما جربته في برنامج بروتوس
void main() {
trisa=0b00001111;
trisb=0;
portb=0;
while(1){
if (porta.f0==0){portb.f0=1;delay_ms(600);}else{portb.f0=0;}
if (porta.f1==0){portb.f1=1;delay_ms(1000);}else{portb.f1=0;}
if (porta.f2==0){portb.f2=1;delay_ms(1600);}else{portb.f2=0;}
if (porta.f3==0){portb.f3=1;delay_ms(2000);}else{portb.f3=0;}
أما بالنسبة للتكرار و ذلك لأستمرار عمل الكود في الشريحة في حال أذا أردنا تكرار التشغيل و الأطفاء لأكثر من مرة و الأ توقفت الشريحة عن العمل و الأستجابة و كأننا بدون عبارة while , برمجنا الشريحة للأستخدام مرة واحدة فقط .
تقبل أحترامي و تقديري
ولكن لي تسائل لماذا أختلف عندي التوقيت فبدلا من (1000 ms) للثانية الواحدة أصبحت (200 ms) للثانية الواحدة .
أرجو من حضرتك التوضيح
احسنت صنعا واسف جدا لو تعبتك
حذففي مشكلة في الكود وهي اقواس النهاية يوجد نقص في قوسين
اما بالنسبة للتوقيت فـ 1000 تعني ثانية
اذا كانت عندك مشكلة في التوقيت كما ذكرت تاكد من قيمة المذبذب في برنامج isis انه يساوي المذبذب الذي وضعة قيمته في الكود
ارجع للدروس اللي فاتت
وفقك الله
السلام عليكم و رحمة الله و بركاته
حذفأستاذي العزيز أشكرك جزيل الشكر و ربنا يوفقك ويرزقك من حيث لا تحتسب و يزيدك من علمه , بارك الله فيك .
بالنسبة للأقواس النهاية موجودة ولكن ضاعت بالنسخ .
أنا بأنتظار دروسك بفارغ الصبر والله , لأني أرغب فعلا بتعلم هذا الفن الرفيع , و أدعوا الله أن يسهل جميع أمورك و يعينك على تقديم بقية الدروس .
تقبل فائق أحترامي و تقديري
تسلم الايادي يا بشمهندس ده البرنامج الي حضرتك طلبته بس ف مشكله لو مثلا ضغط ع المفتاح الرابع هيضئ الليد الرابع ومينفعش يضئ اي ليد غيره الا لما يعدي 10 ثواني يعني مينفعش يضئ 2 ليد ف نفس الوقت
ردحذفوف حاجة تانية لو مسحت portb=0; البرنامج هيشتغل عادي السوال هنا
اية فائدة portb=0; ؟
void main()
{
trisa=0b00001111;
trisb=0;
portb=0;
while (1){
if (porta.f0==0){portb.f0=1;
delay_ms(3000);} else { portb.f0=0; }
if (porta.f1==0){portb.f1=1;
delay_ms(5000);} else { portb.f1=0; }
if (porta.f2==0){portb.f2=1;
delay_ms(8000);} else { portb.f2=0; }
if(porta.f3==0){portb.f3=1;
delay_ms(10000);} else { portb.f3=0; }
}
}
احسنت صنعا
حذفبالنسبة لتشغيل اكتر من ليد هنعرفة في الدروس المقبلة لانهاعلي الرغم من بساطتها الا انهاتحتاج لدراية باشياء اخري
اما بالنسبة لفائدة portb=0 الموجودة في بداية الكود هي ان يكون خرج البورت B صفر وذلك لانه احيانا عند تعريفه وعدم مساوته بالصفر قد يكون الخرج غريب وابه خطاء فقد يضئ احد الاطرف بشكل عشوائي فتاكد من كونها مكتوبة عند البرمجة كخرج دائما
وفقك الله
شكراً علي الرد و التوضيح
ردحذفواحنا بانتظار المزيد من هذه الدروس القيمة
مشكور يا استاذ احمد وجزاك الله خيرا وبانتظار باقي الدروس
ردحذفمشكور استاذ احمد وجزاك الله خيرا وبانتظار باقي الدروس .
ردحذفوفقك الله