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

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

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

الدرس: البرنامج بأكمله Complete Code

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

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

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

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

📝 ملخص الصفحة

📚 البرنامج الكامل لمشروع القفل الذكي

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

البرنامج الكامل: الكود النهائي بلغة C++ لمشروع القفل الذكي، والذي يتضمن مكتبات التحكم بالشاشة (LCD) ولوحة المفاتيح (Keypad) ومحرك السيرفو (Servo).

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

```markmap

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

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

البرمجة

#### دالة loop()

##### التحقق من كلمة المرور

###### آلية المقارنة

  • مقارنة كل مفتاح مضغوط مع الرقم المقابل في مصفوفة `password` بالتتابع.
  • مثال: كلمة مرور مضبوطة "5456" وكلمة مدخلة "5453".
- 5 مقارنة مع 5 (صحيحة)

- 4 مقارنة مع 4 (صحيحة)

- 5 مقارنة مع 5 (صحيحة)

- 3 مقارنة مع 6 (خاطئة) ← كلمة المرور بأكملها خاطئة.

###### استخدام متغير منطقي (Boolean)

  • `bool correctPass = true;`: يتم تهيئته على `true`.
  • عند اكتشاف أي مفتاح خاطئ، تتغير قيمته إلى `false`.
  • بعد انتهاء المقارنة، تشير القيمة `true` إلى صحة المرور، و`false` إلى خطئه.
###### تنفيذ الدالة (مثال كود)

  • `for (int i = 0; i < 4; i++) {`
- `buttonPressed = keypad.waitKeyFor();`

- `if(password[i] != buttonPressed){ correctPass = false; }`

- `lcd.setCursor(i, 1);`

- `lcd.print(buttonPressed);`

  • `}`
##### تنفيذ فتح/غلق القفل

###### إذا كانت كلمة المرور صحيحة

  • مسح شاشة LCD.
  • طباعة رسالة "Correct password!" و "Unlocking...".
  • تدوير محرك السيرفو إلى زاوية 180 درجة لفتح القفل.
  • الانتظار لمدة 5 ثوانٍ.
  • إعادة تدوير محرك السيرفو إلى زاوية 0 درجة لإغلاق القفل.
###### إذا كانت كلمة المرور خاطئة

  • مسح شاشة LCD.
  • طباعة رسالة "Wrong password!".
#### الإعدادات الأولية (Setup)

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

  • `#include `: مكتبة التحكم بشاشة LCD.
  • `#include `: مكتبة التعامل مع لوحة المفاتيح.
  • `#include `: مكتبة التحكم بمحرك السيرفو.
##### تعريف المتغيرات والكائنات

  • `Adafruit_LiquidCrystal lcd(0);`: إنشاء كائن للتحكم بشاشة LCD.
  • `Servo servo;`: إنشاء كائن للتحكم بمحرك السيرفو.
  • `const byte numRows = 4;`: عدد صفوف لوحة المفاتيح.
  • `const byte numCols = 4;`: عدد أعمدة لوحة المفاتيح.
##### تعيين خرائط المفاتيح والتوصيلات

  • `char keymap[numRows][numCols]`: مصفوفة تحدد شكل المفاتيح على اللوحة (من 1 إلى D).
  • `byte rowPins[numRows] = {9,8,7,6};`: تحديد منافذ الأردوينو المتصلة بصفوف اللوحة.
  • `byte colPins[numCols] = {5,4,3,2};`: تحديد منافذ الأردوينو المتصلة بأعمدة اللوحة.
  • `Keypad keypad = Keypad(...);`: تهيئة كائن لوحة المفاتيح باستخدام الخريطة والتوصيلات المحددة.
```

نقاط مهمة

  • الصفحة تقدم الكود الكامل النهائي لمشروع القفل الذكي.
  • يبدأ الكود بتضمين المكتبات الأساسية اللازمة للتحكم بمكونات المشروع (LCD، Keypad، Servo).
  • يتم تعريف خرائط المفاتيح وتوصيلاتها المادية بالأردوينو بشكل واضح في الكود.
  • يجب اختيار وضع البرمجة "نص" (Text) في محرر التعليمات البرمجية عند كتابة هذا الكود.

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

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

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

ختامًا، سيبدو البرنامج بأكمله لمشروع القفل الذكي كالآتي:

البرنامج بأكمله Complete Code

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

البرنامج بأكمله Complete Code

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

// C++ code // #include <Adafruit_LiquidCrystal.h> #include <Keypad.h> #include <Servo.h>

نوع: NON_EDUCATIONAL

اختر وضع البرمجة نص (Text) في محرر التعليمات البرمجية.

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

Adafruit_LiquidCrystal lcd(0); Servo servo;

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

const byte numRows = 4; //number of rows on the keypad const byte numCols = 4; //number of columns on the keypad

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

// keymap defines the key pressed according to the rows and columns just as they // appear on the //keypad char keymap[numRows][numCols] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} };

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

// Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3 byte colPins[numCols] = {5,4,3,2}; //Columns 0 to 3

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

// initializes an instance of the Keypad class Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

نوع: METADATA

وزارة التعليم Ministry of Education 2025 - 1447

نوع: METADATA

254

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

ختامًا، سيبدو البرنامج بأكمله لمشروع القفل الذكي كالآتي: --- SECTION: البرنامج بأكمله Complete Code --- البرنامج بأكمله Complete Code // C++ code // #include <Adafruit_LiquidCrystal.h> #include <Keypad.h> #include <Servo.h> اختر وضع البرمجة نص (Text) في محرر التعليمات البرمجية. Adafruit_LiquidCrystal lcd(0); Servo servo; const byte numRows = 4; //number of rows on the keypad const byte numCols = 4; //number of columns on the keypad // keymap defines the key pressed according to the rows and columns just as they // appear on the //keypad char keymap[numRows][numCols] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; // Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3 byte colPins[numCols] = {5,4,3,2}; //Columns 0 to 3 // initializes an instance of the Keypad class Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); وزارة التعليم Ministry of Education 2025 - 1447 254

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

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

في برمجة لوحة المفاتيح (Keypad) باستخدام مكتبة Keypad.h، ما الغرض من المصفوفة ثنائية الأبعاد `keymap`؟

  • أ) تخزين حالة كل زر (مضغوط أو غير مضغوط) في الذاكرة.
  • ب) تحديد عدد الصفوف والأعمدة في لوحة المفاتيح فقط.
  • ج) تحديد الرمز (الحرف) الذي يتم ضغطه وفقاً لموقع الصف والعمود على لوحة المفاتيح كما تظهر عليها.
  • د) تحديد أرقام المنافذ (Pins) في الأردوينو المتصلة بلوحة المفاتيح.

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

الإجابة: تحديد الرمز (الحرف) الذي يتم ضغطه وفقاً لموقع الصف والعمود على لوحة المفاتيح كما تظهر عليها.

الشرح: 1. تُستخدم مصفوفة `keymap` لتعيين الرموز (مثل '1', '2', 'A', '#') إلى مواقع محددة على لوحة المفاتيح. 2. يتم تعريفها كصفيف ثنائي الأبعاد بحيث يتوافق الصف الأول والعمود الأول مع الزر الأول في الزاوية العلوية اليسرى. 3. عند الضغط على زر، يبحث البرنامج في هذه المصفوفة باستخدام مؤشرات الصف والعمود لاسترجاع الحرف المقابل.

تلميح: هذه المصفوفة تربط بين الأزرار الفعلية على اللوحة والقيم التي يقرأها البرنامج.

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

في الكود الموضح لبرمجة القفل الذكي، ما الغرض من المصفوفتين `rowPins` و `colPins`؟

  • أ) تحديد عدد الصفوف والأعمدة التي يجب على البرنامج مسحها.
  • ب) تخزين الرموز المقابلة للأزرار المضغوطة.
  • ج) تحديد أرقام المنافذ (Pins) في الأردوينو المتصلة بصفوف وأعمدة لوحة المفاتيح على التوالي.
  • د) تحديد سرعة مسح لوحة المفاتيح.

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

الإجابة: تحديد أرقام المنافذ (Pins) في الأردوينو المتصلة بصفوف وأعمدة لوحة المفاتيح على التوالي.

الشرح: 1. تُستخدم `rowPins` لتخزين أرقام المنافذ الرقمية في الأردوينو المتصلة بأسلاك الصفوف الأربعة للوحة المفاتيح. 2. تُستخدم `colPins` لتخزين أرقام المنافذ الرقمية في الأردوينو المتصلة بأسلاك الأعمدة الأربعة للوحة المفاتيح. 3. هذه المعلومات ضرورية لمكتبة Keypad لمسح (Scan) اللوحة والكشف عن الضغطات.

تلميح: هذه المصفوفات تحدد الروابط المادية (الأسلاك) بين الأردوينو ومكون الإدخال.

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

ما هي الخطوة الأولى في تهيئة كائن من فئة `Keypad` في الكود الموضح؟

  • أ) تحديد حجم المصفوفتين `rowPins` و `colPins`.
  • ب) استدعاء الدالة `makeKeymap()` لإنشاء خريطة المفاتيح من المصفوفة `keymap`.
  • ج) تعريف المتغيرات `numRows` و `numCols`.
  • د) توصيل لوحة المفاتيح فعلياً بمنافذ الأردوينو.

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

الإجابة: استدعاء الدالة `makeKeymap()` لإنشاء خريطة المفاتيح من المصفوفة `keymap`.

الشرح: 1. لإنشاء كائن (instance) من فئة `Keypad`، يجب استدعاء مُنشئها (constructor). 2. أول معامل مُمرر هو نتيجة استدعاء الدالة `makeKeymap(keymap)`. 3. تقوم `makeKeymap()` بتحويل المصفوفة `keymap` إلى تنسيق تفهمه مكتبة Keypad. 4. المعاملات التالية هي `rowPins`, `colPins`, `numRows`, `numCols`.

تلميح: انظر إلى السطر الذي يبدأ بـ `Keypad keypad = Keypad(...`. ما هو أول معامل (argument) يتم تمريره؟

التصنيف: صيغة/خطوات | المستوى: صعب