قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 30-03-2020, 12:15 PM المشاركة 1   
افتراضي الدرس الثانى عشر العوامل المنطقية Logical Operators : Twitter FaceBook Google+



دورة برمجة الاردوينو : الدرس الثانى عشر
العوامل المنطقية Logical Operators :


يمكن استخدام العوامل المنطقية مع if و if-else لتبسيط وتوسيع عملية صنع القرار.
العوامل المنطقية الثلاثة هي "أو" OR (||) و "و" AND (&&) و "نفى" NOT (!) التي يتم شرحها وتوضيحها في هذا الدرس .

1- العامل المنطقي OR (||) : The OR Logical Operator (||)
يتم كتابة العامل المنطقي OR في البرامج على هيئة الرمز (||) الموجودة على نفس مفتاح الشرطة المائلة للخلف (\) في لوحة المفاتيح . الضغط على Shift + مفتاح الخط المائل للخلف سيكتب هذا الرمز ( || ) .
يوضح البرنامج التالي استخدام العامل المنطقي OR للتحقق من الحروف الأبجدية ، الكبيرة والصغيرة .

كود:
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);  // LED on pin 13 of UNO
}

void loop() {
  char rx_byte;
  
  if (Serial.available() > 0) {    // is a character available?
    rx_byte = Serial.read();
    if (rx_byte == 'a' || rx_byte == 'A') {
      digitalWrite(13, HIGH);
    }
    else {
      digitalWrite(13, LOW);
    }
  }
}

سيقوم البرنامج لتشغيل الليد على لوحة Arduino Uno إذا تم إرسال الحرف الصغير 'a' أو or الحرف الكبير 'A' من نافذة الشاشة التسلسلية. إذا تم إرسال أي حرف آخر ، يتم إيقاف تشغيل الليد .

• كيف يعمل العامل المنطقي OR
الكود أدناه مأخوذ من البرنامج أعلاه ويعرض العامل المنطقي OR.

كود:
if (rx_byte == 'a' || rx_byte == 'A') {
  digitalWrite(13, HIGH);
}

سيتم تشغيل الكود الموجود في جسم عبارة if إذا كان المتغير rx_byte يحتوي على 'a' أو OR (||) إذا كان يحتوي على 'A'. تم استخدام العامل OR لاختبار حرف أو آخر (A OR a).
يمكن تعديل الكود لتشغيل الليد إذا تم استقبال الحرف 'a' أو الحرف'b' أو الحرف 'c' ، كما يوضح هذا الكود التالي.

كود:
if ((rx_byte == 'a') || (rx_byte == 'b') || (rx_byte == 'c')) {
  digitalWrite(13, HIGH);
}
في الكود أعلاه ، تم وضع كل عامل المقارنة يساوى (==) للمقارنة بين قوسين () لتسهيل قراءة الكود. يؤدي هذا أيضًا إلى تجنب أي سوء فهم بشأن أي عامل يتم تقييمه أولاً (هل يتم تقييم == أو || أولاً؟).
عامل المقارنة == له أسبقية أعلى من العامل المنطقى || مما يعني أن == يتم تقييمه أولاً. الأقواس لها أعلى أسبقية ، لذلك سيتم تقييم أي شيء يوضع بين قوسين أولاً. في هذه الحالة ، ليس من الضروري وضع الأقواس ، ولكنه يسهل القراءة.

2- العامل المنطقي "و" AND (&&) : The AND Logical Operator (&&)
يوضح البرنامج التالي استخدام العامل المنطقي AND. يختبر البرنامج لمعرفة أنه تم استلام تسلسل (تتابع) sequenc من حرفين قبل تشغيل الليد .

كود:
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);  // LED on pin 13 of UNO
}

char first_char = 0;

void loop() {
  char rx_byte;
  
  if (Serial.available() > 0) {    // is a character available?
    rx_byte = Serial.read();       // read the character
    if ((first_char == 'c') && (rx_byte == 'd')) {
      digitalWrite(13, HIGH);
    }
    else {
      first_char = rx_byte;        // save the character for next comparison
      digitalWrite(13, LOW);
    }
  }
}

في هذا البرنامج ، يجب إرسال حرفين بالترتيب الصحيح لتشغيل الليد LED. يجب أولاً إرسال حرف 'c' متبوعة بحرف 'd'.

• كيف يعمل العامل المنطقى AND :
يظهر العامل AND من البرنامج أعلاه كما يلى .

كود:
 if ((first_char == 'c') && (rx_byte == 'd')) {
  digitalWrite(13, HIGH);
}

سيتم تشغيل الليد LED فقط عندما يحتوي المتغير first_char على 'c' و AND المتغير rx_byte يحتوي على 'd'.
يتم استخدام المتغير first_char لتخزين الحرف الحالي المستقبل بحيث يمكننا في المرة القادمة تقييم العبارة if ، يمكننا أن نرى ما إذا كان متبوعًا بالحرف 'd' وإذا كان يحتوي على 'c'.

3- العامل المنطقى (نفى أو معكوس) NOT : The Logical NOT Operator (!)
يمكن استخدام العامل NOT للتحقق مما إذا كان المتغير يحتوي على القيمة 0 - بمعنى آخر ، يمكن استخدامه للتحقق مما إذا كان المتغير يقيم على أنه خطأ false .

كود:
int x = 0;
if(!x) {
	// if not x - if x evaluates to false, code here will run
}

// this code is another way of writing the above code
if (x == 0) {
}

• مثال على العامل NOT :
يوضح المثال التالي استخدام العامل NOT المنطقي في برنامج . على الرغم من أن هذا البرنامج ليس تطبيقًا عمليًا جدًا للعامل NOT ، إلا أنه يوضح كيفية عمله.
في البرنامج ، سيقوم كل حرف يتم إرسالها إلى Arduino من النافذة التسلسلية بتشغيل الليد ، باستثناء الحرف 'a'.

كود:
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);  // LED on pin 13 of UNO
}

void loop() {
  char rx_byte;
  
  if (Serial.available() > 0) {    // is a character available?
    rx_byte = Serial.read();       // read the character
    if (!(rx_byte == 'a')) {
      digitalWrite(13, HIGH);
    }
    else {
      digitalWrite(13, LOW);
    }
  }
}

يقوم العامل not بعكس inverts المنطق في عبارة if الثانية كما هو موضح أدناه .

كود:
if (!(rx_byte == 'a')) {
  digitalWrite(13, HIGH);
}

إذا كان المتغير rx_byte يحتوي على الحرف 'a' ، فسيتم تقييم التعبير في عبارة if إلى true ، ولكن العامل NOT يغير النتيجة إلى false بحيث يتم إيقاف تشغيل LED عند استلام 'a'.
وبالمثل ، إذا كان المتغير rx_byte يحتوي على أي حرف باستثناء 'a' ، فسيتم تقييم التعبير إلى false ، ولكن عامل التشغيل NOT يحول النتيجة false إلى true.

يمكن كتابة الكود أعلاه بسهولة أكبر باستخدام عامل المقارنة (!=) لا يساوي كما يلي.

كود:
if (rx_byte != 'a') {
  digitalWrite(13, HIGH);
}

العامل المنطقي NOT لديه تطبيق عملي في البرامج الأكثر تعقيدًا. تذكر فقط أنه إذا كانت نتيجة المقارنة بحاجة إلى عكسها ، فيمكن استخدام العامل المنطقي NOT. يمكن استخدامه لفرض (لإجبار) عبارة if للتقييم إلى true عندما يتم تقييمها عادةً على false ، وبالتالي تنفيذ الكود في جسم عبارة if بدلاً من الحاجة إلى وجود عبارة if فارغة وتشغيل الكود في كتلة else المقابلة .

اعلانات
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 09:54 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025