بسم الله الرحمن الرحيم
الموضوع الخامس : الشروط والحلقات التكرارية والبوابات المنطقية :
بعد ان قمنا بشرح المداخل الرقمية فى الموضوع السابق وقمنا بعرض هذا الكود
int led = 11;
int sw = 2;
int d1 = 600;
int d2 = 300;
void setup(){
pinMode(sw,INPUT_PULLUP);
pinMode(led,OUTPUT);
}
void loop(){
int x = digitalRead(sw);
if(x==0){
digitalWrite(led,HIGH);
delay(d2);
digitalWrite(led,LOW);
delay(d2);
}
else{
digitalWrite(led,HIGH);
delay(d1);
digitalWrite(led,LOW);
delay(d1);
}
}
الذى لم نشرحه كله
ففى هذا الموضع سيتم شرح الشروط مثل
if(){}
else{}
while(){}
for(){}
هذه اشهر الحلقات التكرارية التى سنشرحها
فى هذا الموضوع اليوم
اولا ما هى الفائدة من استخدام هذا النوع الأوامر؟
بالتأكيد لقد سمعتم فى حياتكم مصطلحح الذكاء الإصطناعى وقدرة الأجهزة الذكية على اتخاذ قرار
عن طريق بعض البيانات المدخلة عليها ببساطة شديدة يعتبر هذا النظام الكامل من التفكير
واتخاذ القرارت مبنى بشكل كامل على الشروط فالشروط هى ما تجعل شريحة الأردوينو وغيرها
من الشرائح ذكية
X==0 ففى هذا الكود قلنا لو كان
قم بتشغيل الليد بتأخير سريع
وان لم يكن قم بتشغيل الليد بتأخير بطئ
فبهذا الكود جعلنا الأرديونو يفكر
اولا : يحصل على بيانات وهى الضغط على السويتش
ثانيا : مقارنة البيانات بالشروط المثبته لديه
ثالثا : تنفيذ الشروط
فبهذه الطريقة تعمل جميع الأنظمة الذكية فى العالم ومن امثلتها الأردوينو
نبدأ الأن بأول شرط لدينا
If(x){y}
فى بداية الشروط if عند الحديث عن الشروط ياتى الشرط
حيث يعد الأفضل من ناحية الإستخدام
X:نضع هنا الشرط المطلوب التحقق منه
Y:نضع هنا الكود الذى سيتنفذ عند تحقق الشرط
فكالمثال السابق عندما قلنا
If(x==0){digitalWrite(led,HIGH);}
فعند الشرط يوجد بنيتان اساسيتان
X==0اولا الشرط : وهو الذى يأتى بين قوسين وفى هذا الكود الشرط هو
ثانيا كود التنفيذ : فإذا تحقق الشرط يبدأ البرنامج فى تمييز الكود اكثر من مره
حتى يصبح الشرط غير محقق
فنحن هنا نقول
هل المتغير اكس يساوى صفر فإذا كان يساوى صفر قم بتشغيل اللمبة
هذه هى البنية الأساسية
ولكن ماذا نفعل إذ لم يتحقق الشرط
نستخدم امر
else{x}
فهذا الأمر ببساطة يتحقق ان لم يتحقق الشرط فهذا الأمر دائما ما يأتى بعد
If
فكمثال فى الكود السابق
If(x==0)
{
digitalWrite(led,HIGH);
}
else{
digitalWrite(led,LOW);
}
ففى هذا الكود يقوم المتحكم بتحقق من قيمة x
فإّذا كانت تساوى صفر يبدأ الكود الذى يتعبر كجواب للشرط
else{}ولكن ان لم تكن اكس تساوى صفر يبدأ البرنامج بتنفيذ الكود الموجود تحت
من احد اهم المميزات لهذا الشرط هو عدم الإنتظار حيث توجد تطبيقات فى الأردوينو يلزم عند عمل تأخير فى الكود
فهذا الشرط يجعل الكود ينفذ ما بعده وما قبله بدون عمل تأخير للكود
الشرط الثانى :
While(x){y}
حيث تتكرر هذه الحلقة عدة مرات وهى مشابهة تمام
If condention
ولكن الفرق بينهما انها تقوم بعمل تكرار بشكل مستمر للكود حتى يختلف الشرط فمثلا عن استخدامك لها
ستلاحظ ان الكود يقف عندها حتى يتحقق شرطها
وتكون مفيدة فى بعض العمليات
الشرط الثالث
For(x;y;c){Z}
يعتبر هذا الأمر كبير قليلا لكنه مفيد جدا
حيث يكرر عدة اوامر لمرات محدةة تقوم انت بتحديدها حيث :
X : نكتب هنا متغير من نوع رقم صحيح لكى نبدأ العد فيه
Y : نكتب هنا شرط لتنفيذ الكود
C : هنا نكتب العملية على المتغير
Z : هنا نكتب الكود الذى يتحقق
مثال
For(int i = 0;i<10;i++){
digitalWrite(led,HIGH);
delay(200);
digitalWrite(led,HIGH);
delay(200);
}
حيث يقوم الكود السابق بعمل وميض لليد لمدة عشرة مرات ويمكنم الذهاب للتينكركاد وتجربة هذا الكود
فنقول فى هذا الكود
اصنع لنا متغيرا واجعل قيمته بصفر
هل المتغير اصغر من عشرة ؟ نعم
قم بجمع واحد على المتغير
وقم بتكرار كود الوميض
لا
اخرج من الحلقة واستكمل باقى الكود
اخرج من الحلقة واستكمل باقى الكود
هذا السيناريو يحدث فى شريحة الأردوينو للتحقق من الشروط
بهذا نكون قد قدمنا شرحا كافى لفهم الشروط والحلقات التكرارية
ننتقل الان جزء مهم جدا فى هذا الموضوع : العمليات المنطقية
فى علوم الحاسوب يوجد جزء مهم يسمى علم المنطق وهذا العمل هو الذى يقوم عليه معالجات الكمبيوتر والهواتف
بدون مبالغة كل شرائح العالم تعتبر مبنية بشكل اساسي على بوابات المنطقية
يةجد ثلاث بوابات منطقية اساسية
(AND – OR – NOT)
AND gate :
يوجد مع كل بوابة جدول يسمى جدول الحقيقة قفنلاحظ عند ادخال واحد على الطرفين نحصل على واحد على الخرج
وعند ادخال صفر على احد المنافذ يعطى صفر مهما كانت باقى المنافذ
ركز هذه الأساس فى غالبية لغات البرمجة منها الأردوينو
رمز البوابة :
&&
int sw1 = 3;
int sw2 = 4;
int led = 5;
void setup(){
pinMode(sw1,INPUT_PULLUP);
pinMode(sw2,INPUT_PULLUP);
pinMode(led,OUTPUT);
}
void loop(){
int status1 = digitalRead(sw1);
int status2 = digitalRead(sw2);
if(status1 == 0 && status2 == 0){
digitalWrite(led,HIGH);
}
}
ففى الكود السابق بعد ان قمنا بتعريف المتغيرات اللازمة والقراءة من قيمة السويتشات
فنقول
لو ان حالة السويتش الأول = مضغوط
و حالة السويتش الثانى = مضغوط
فقم بتشغيل الليد
فلكى نقم بتشغيل الليد يجب ان نضغط على الزران لكى تعمل الليد وهذا تطبيق لمبدأ هذه البوابة
OR gate :
كما نلاحظ من جدول الحقيقة يكفى اعطاء واحد على اى مدخل من مدخل البوابة للحصول على خرج واحد
رمز هذه البوابة فى الأردوينو
||
int sw1 = 3;
int sw2 = 4;
int led = 5;
void setup(){
pinMode(sw1,INPUT_PULLUP);
pinMode(sw2,INPUT_PULLUP);
pinMode(led,OUTPUT);
}
void loop(){
int status1 = digitalRead(sw1);
int status2 = digitalRead(sw2);
if(status1 == 0 ||status2 == 0){
digitalWrite(led,HIGH);}
}
ففى الكود السابق فى الشرط المكتوب
عند
الضغط على السويتش الأول او الضغط على السويتش الثانى تقوم الأردوينو بالليد وهذا ما يوضح مبدأ هذه البوابة
وانصحكم بتجربة هذا الكود فى التينكركاد لكى تتمرونوا على حفظ الأكواد وكتابة سوفت وير
NOT gate :
سنشرحها فى دروس قادمة
ملحوظة فى استعمال الأرقام فى المقارنات فهى لا توضع بين علامتين تنصيص بل يكفى وضعها بدون علامتين تنصيص
والان بعد ان قمنا بشرح العديد من المواضيح يجب ان تفهموا هذا الدرس جيدا
الحمد لله رب العالمين
بقلم : بلال حسان سعدى
بارك الله فيكم
ردحذفجزاك الله خير
ردحذف