إيقاف البرنامج Break this Code down - كتاب إنترنت الأشياء - الصف 11 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: إيقاف البرنامج Break this Code down

📚 معلومات الصفحة

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

📝 ملخص الصفحة

📚 إيقاف البرنامج (Break this Code down)

المفاهيم الأساسية

كود التحقق من كلمة المرور: التعليمات البرمجية التي تنفذ إجراءات مختلفة بناءً على صحة كلمة المرور المدخلة.

خريطة المفاهيم

```markmap

تمارين برمجة C++ لإنترنت الأشياء

المشروع: إنشاء قفل باب ذكي

المكونات المستخدمة

  • لوحة أردوينو أونو R3 (Arduino Uno R3)
  • لوحة مفاتيح (مقياس 4x4)
#### توصيل لوحة المفاتيح

##### خطوات التوصيل

  • توصيل صفوف لوحة المفاتيح
###### الصف الأول: الطرف الرقمي 9

###### الصف الثاني: الطرف الرقمي 8

###### الصف الثالث: الطرف الرقمي 7

###### الصف الرابع: الطرف الرقمي 6

  • توصيل أعمدة لوحة المفاتيح
###### العمود الأول: الطرف الرقمي 5

###### العمود الثاني: الطرف الرقمي 4

###### العمود الثالث: الطرف الرقمي 3

###### العمود الرابع: الطرف الرقمي 2

##### ملاحظة

  • تغيير لون جميع أسلاك التوصيل إلى الأخضر (green)
  • شاشة LCD مقاس 16x2 (I2C)
#### توصيل شاشة LCD

##### خطوات التوصيل

  • توصيل الطرف GND (الأرضي) لشاشة LCD بطرف GND (الأرضي) الخاص بالأردوينو (سلك أسود)
  • توصيل طرف Power (الطاقة) لشاشة LCD بالطرف 5V (فولت) بالأردوينو (سلك أحمر)
  • توصيل طرف SDA لشاشة LCD بطرف SDA بالأردوينو (سلك أخضر)
  • توصيل طرف SCL لشاشة LCD بطرف SCL بالأردوينو (سلك أصفر)
  • محرك سيرفو مصغر (Micro Servo)
#### توصيل محرك السيرفو المصغر

##### خطوات التوصيل

  • توصيل الطرف GND (الأرضي) للمحرك بطرف GND (الأرضي) بالأردوينو (سلك أسود)
  • توصيل طرف Power (الطاقة) للمحرك بالطرف 5V (فولت) بالأردوينو (سلك أحمر)
  • توصيل طرف Signal (الإشارة) للمحرك بالطرف الرقمي 11 بالأردوينو (سلك برتقالي)

البرمجة

#### تضمين المكتبات

  • الصيغة العامة: #include
##### مكتبات المشروع الحالي

  • للوحة LCD: #include
  • للوحة المفاتيح: #include
  • للمحرك المؤازر: #include
#### إنشاء الكائنات

  • كائن لشاشة LCD.
  • كائن للمحرك المؤازر (Servo motor).
  • كائن للوحة المفاتيح.
##### كائن محرك السيرفو المصغر

###### الأمر: Servo servo;

  • `Servo`: نوع الكائن.
  • `servo`: اسم الكائن الفعلي المستخدم.
  • لا يحتاج إلى معاملات للتهيئة.
##### كائن شاشة LCD

###### الأمر: Adafruit_LiquidCrystal lcd(0);

  • `Adafruit_LiquidCrystal`: نوع الكائن.
  • `lcd`: اسم الكائن.
  • `(0)`: معامل التهيئة (عنوان الأردوينو الابتدائي، 0 افتراضياً).
##### كائن لوحة المفاتيح

###### تهيئة الأبعاد

  • الأمر: const byte numRows = 4;
  • الأمر: const byte numCols = 4;
  • `numRows`: عدد الصفوف (4).
  • `numCols`: عدد الأعمدة (4).
###### تحديد مصفوفة المفاتيح (keymap)

  • مصفوفة ثنائية الأبعاد تحدد شكل لوحة المفاتيح.
#### دالة setup()

##### تهيئة محرك السيرفو

  • `servo.attach(11);`: ربط السيرفو بالطرف 11.
  • `servo.write(0);`: ضبط زاوية السيرفو على 0 درجة.
##### تهيئة شاشة LCD وتعيين كلمة المرور

  • `lcd.begin(16, 2);`: تهيئة شاشة LCD ذات 16 عمود وصفين.
  • `lcd.setCursor(0, 0);`: تحديد موقع الكتابة في العمود 0، الصف 0.
  • `lcd.print("Set 4 character");`: طباعة "Set 4 character" على الصف الأول.
  • `lcd.setCursor(0, 1);`: تحديد موقع الكتابة في العمود 0، الصف 1.
  • `lcd.print("password:");`: طباعة "password:" على الصف الثاني.
##### استقبال كلمة المرور من لوحة المفاتيح

  • حلقة `for` لتخزين 4 أحرف.
  • `password[i] = keypad.waitForKey();`: استقبال حرف وتخزينه في مصفوفة `password`.
#### دالة loop()

##### عرض رسالة الطلب

  • `lcd.clear();`: مسح شاشة LCD.
  • `lcd.setCursor(0, 0);`: تحديد موقع الكتابة في العمود 0، الصف 0.
  • `lcd.print("Enter password:");`: طباعة "Enter password:" على الشاشة.
##### التحقق من كلمة المرور

  • إنشاء متغير منطقي `correctPass` وضبطه على `true`.
  • إنشاء متغير `buttonPressed` لتخزين المفتاح المضغوط.
  • استخدام حلقة `for` لفحص 4 أزرار.
  • `buttonPressed = keypad.waitKey();`: انتظار ضغط مفتاح وتخزينه.
  • مقارنة كل مفتاح مع الرقم المقابل في مصفوفة `password`.
  • إذا كان المفتاح غير مطابق، يتم ضبط `correctPass` على `false`.
  • `lcd.setCursor(i, 1);`: تحديد موقع طباعة المفتاح المضغوط على الصف الثاني.
  • `lcd.print(buttonPressed);`: طباعة المفتاح المضغوط على الشاشة.
  • `delay(1000);`: تأخير لمدة ثانية واحدة.
##### تنفيذ الإجراء عند صحة المرور

  • إذا كان `correctPass` يساوي `true`، يتم مسح شاشة LCD باستخدام `lcd.clear();`.
##### إيقاف البرنامج (Break this Code down)

###### كود المرور الصحيح

  • `lcd.setCursor(0, 0);`: ضبط المؤشر لبداية السطر الأول.
  • `lcd.print("Correct password!");`: طباعة "كلمة المرور صحيحة!".
  • `lcd.setCursor(0, 1);`: ضبط المؤشر لبداية السطر الثاني.
  • `lcd.print("Unlocking...");`: طباعة "جاري فتح القفل...".
  • `servo.write(180);`: تدوير محرك السيرفو إلى زاوية 180 درجة.
  • `delay(5000);`: انتظار 5 ثوانٍ.
  • `servo.write(0);`: إعادة السيرفو إلى زاويته الأصلية (0 درجة).
###### كود المرور الخاطئ

  • `lcd.clear();`: مسح شاشة LCD.
  • `lcd.setCursor(0, 0);`: ضبط المؤشر في العمود الأول، السطر الأول.
  • `lcd.print("Wrong password!");`: طباعة "كلمة المرور خاطئة!".
```

نقاط مهمة

  • تحتوي الصفحة على أمثلة للتعليمات البرمجية التي تتعامل مع شاشة LCD ومحرك السيرفو بناءً على نتيجة التحقق من كلمة المرور.
  • يتم استخدام `lcd.clear()` و `lcd.setCursor()` و `lcd.print()` لعرض رسائل مختلفة للمستخدم.
  • في حالة المرور الصحيح، يتم تدوير السيرفو (`servo.write(180)`) ثم إعادته بعد 5 ثوانٍ (`servo.write(0)`).
  • في حالة المرور الخاطئ، يتم فقط عرض رسالة خطأ على الشاشة.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

إيقاف البرنامج Break this Code down

نوع: محتوى تعليمي

// set the cursor to the beginning of the 1st line lcd.setCursor(0, 0); lcd.print("Correct password!"); // set the cursor to the beginning of the 2nd line lcd.setCursor(0, 1); lcd.print("Unlocking..."); // write the angle by which the servo will rotate servo.write(180); // wait 5 sec and then rotate the servo to its original angle delay(5000); servo.write(0); } else { // this code will be executed if the password is wrong // clear the lcd screen lcd.clear(); // set the cursor at the 1st col,row lcd.setCursor(0, 0); // print the message lcd.print("Wrong password!"); }

نوع: محتوى تعليمي

توجد في البرنامج بعض التعليمات البرمجية لمسح شاشة LCD، ولعرض رسالة تطلب كلمة المرور.

نوع: محتوى تعليمي

// clear the screen and display the new message lcd.clear(); lcd.setCursor(0, 0); lcd.print("Enter password:");

📄 النص الكامل للصفحة

--- SECTION: إيقاف البرنامج Break this Code down --- // set the cursor to the beginning of the 1st line lcd.setCursor(0, 0); lcd.print("Correct password!"); // set the cursor to the beginning of the 2nd line lcd.setCursor(0, 1); lcd.print("Unlocking..."); // write the angle by which the servo will rotate servo.write(180); // wait 5 sec and then rotate the servo to its original angle delay(5000); servo.write(0); } else { // this code will be executed if the password is wrong // clear the lcd screen lcd.clear(); // set the cursor at the 1st col,row lcd.setCursor(0, 0); // print the message lcd.print("Wrong password!"); } توجد في البرنامج بعض التعليمات البرمجية لمسح شاشة LCD، ولعرض رسالة تطلب كلمة المرور. // clear the screen and display the new message lcd.clear(); lcd.setCursor(0, 0); lcd.print("Enter password:");

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 4 بطاقة لهذه الصفحة

في برمجة Arduino مع شاشة LCD، ما الغرض من الدالة `lcd.clear()`؟

  • أ) تغيير سطوع إضاءة خلفية شاشة LCD.
  • ب) مسح جميع المحارف من شاشة LCD وإرجاع المؤشر إلى الموضع (0,0).
  • ج) إيقاف تشغيل شاشة LCD مؤقتاً.
  • د) تحديث محتوى الشاشة دون مسح البيانات القديمة.

الإجابة الصحيحة: b

الإجابة: مسح جميع المحارف من شاشة LCD وإرجاع المؤشر إلى الموضع (0,0).

الشرح: 1. الدالة `lcd.clear()` هي جزء من مكتبة LiquidCrystal. 2. وظيفتها الأساسية هي إزالة كل النصوص والأحرف المعروضة على الشاشة. 3. بعد التنفيذ، يعود المؤشر (Cursor) تلقائياً إلى بداية السطر الأول (الموضع 0,0). 4. تُستخدم عادةً قبل عرض رسالة جديدة لضمان نظافة الشاشة.

تلميح: تستخدم هذه الدالة عند الرغبة في إزالة النص القديم وإظهار نص جديد.

التصنيف: تعريف | المستوى: سهل

ما وظيفة الدالة `lcd.setCursor(0, 1)` في برمجة شاشة LCD مع Arduino؟

  • أ) تشغيل مؤشر وامض في منتصف السطر الأول من الشاشة.
  • ب) تحديد موقع المؤشر لبدء الكتابة عند العمود الأول (0) من السطر الثاني (1) على شاشة LCD.
  • ج) تعيين لون النص الذي سيتم طباعته على شاشة LCD الملونة.
  • د) حذف المحتوى الموجود في السطر الثاني فقط من الشاشة.

الإجابة الصحيحة: b

الإجابة: تحديد موقع المؤشر لبدء الكتابة عند العمود الأول (0) من السطر الثاني (1) على شاشة LCD.

الشرح: 1. الدالة `lcd.setCursor(col, row)` تستخدم للتحكم في مكان ظهور النص التالي على شاشة LCD. 2. المعامل الأول (col) يمثل رقم العمود، ويبدأ من 0. 3. المعامل الثاني (row) يمثل رقم السطر، ويبدأ من 0. 4. إذن، `lcd.setCursor(0, 1)` تحدد أن الكتابة التالية ستبدأ من أول عمود في السطر الثاني من الشاشة.

تلميح: تأخذ الدالة معاملين رقميين، الأول للعمود والثاني للسطر.

التصنيف: تعريف | المستوى: سهل

في سياق التحكم بمحرك سيرفو (Servo) باستخدام Arduino، ماذا تفعل الأمر `servo.write(180)`؟

  • أ) إيقاف تشغيل محرك السيرفو فوراً.
  • ب) تعيين سرعة دوران محرك السيرفو إلى 180 درجة في الثانية.
  • ج) توجيه محرك السيرفو للدوران إلى الزاوية 180 درجة.
  • د) تهيئة مكتبة Servo لتعمل مع منفذ رقمي محدد.

الإجابة الصحيحة: c

الإجابة: توجيه محرك السيرفو للدوران إلى الزاوية 180 درجة.

الشرح: 1. الأمر `servo.write(angle)` يستخدم للتحكم في موضع محرك السيرفو. 2. المعامل `angle` يمثل الزاوية بالدرجات التي سيدور إليها عمود المحرك. 3. القيمة 180 تعني الدوران إلى أقصى موضع في اتجاه واحد (عادةً 180 درجة). 4. هذا الأمر شائع الاستخدام في التطبيقات مثل فتح الأقفال أو تحريك الذراع.

تلميح: يحدد الرقم المُمرر للدالة `write()` موضع العمود الدوار للسيرفو.

التصنيف: مفهوم جوهري | المستوى: متوسط

ما الغرض من استخدام الأمر `delay(5000)` في الكود البرمجي المذكور بعد فتح القفل؟

  • أ) تسريع معالجة البيانات من المستشعرات لمدة 5 ثوانٍ.
  • ب) تشغيل نغمة إنذار لمدة 5000 هرتز.
  • ج) إيقاف تنفيذ البرنامج (التأخير) لمدة 5000 مللي ثانية (5 ثوانٍ) قبل إعادة القفل.
  • د) تعيين مهلة زمنية لانتهاء صلاحية إدخال كلمة المرور.

الإجابة الصحيحة: c

الإجابة: إيقاف تنفيذ البرنامج (التأخير) لمدة 5000 مللي ثانية (5 ثوانٍ) قبل إعادة القفل.

الشرح: 1. الدالة `delay()` توقف معالجة البرنامج الرئيسي لفترة زمنية محددة. 2. المعامل الذي تأخذه هو الوقت بالمللي ثانية (ms). 3. `delay(5000)` تعني إيقاف التنفيذ لمدة 5000 مللي ثانية. 4. 5000 مللي ثانية ÷ 1000 = 5 ثوانٍ. 5. في هذا السياق، يُستخدم لإبقاء القفل مفتوحاً لمدة 5 ثوانٍ قبل إعادته إلى وضع الإغلاق.

تلميح: يقيس الوقت بالمللي ثانية. 1000 مللي ثانية = 1 ثانية.

التصنيف: مفهوم جوهري | المستوى: سهل