📚 تمارين برمجة C++ لإنترنت الأشياء
المفاهيم الأساسية
(لا تحتوي الصفحة على تعريفات جديدة للمصطلحات، بل على تمارين تطبيقية فقط).
خريطة المفاهيم
```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(...);`: تهيئة كائن لوحة المفاتيح باستخدام الخريطة والتوصيلات المحددة.
##### تهيئة المكونات في `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:" على السطر الثاني.
###### تخزين كلمة المرور
- `char password[4];`: تعريف مصفوفة لتخزين 4 أحرف لكلمة المرور.
- `for(int i = 0; i < 4; i++){ password[i] = keypad.waitKey(); }`: حلقة لجمع 4 مفاتيح من لوحة المفاتيح وتخزينها في المصفوفة.
تمارين تطبيقية جديدة
التمرين 1
#### المهمة
- إنشاء دائرة في برنامج تينكركاد.
#### المكونات
- مستشعر درجة الحرارة.
- شاشة LCD.
#### البرمجة
- برمجة الدائرة باستخدام لغة C++.
#### الوظيفة
- عرض درجة الحرارة المقروءة من المستشعر على شاشة LCD.
التمرين 2
#### المهمة
- إنشاء دائرة في برنامج تينكركاد.
#### المكونات
- لوحة مفاتيح 4x4.
- شاشة LCD.
#### البرمجة
- برمجة الدائرة باستخدام لغة C++.
#### الوظيفة
- عرض الأحرف التي يتم الضغط عليها من لوحة المفاتيح على شاشة LCD.
```
نقاط مهمة
- تحتوي الصفحة على تمرينين تطبيقيين جديدين.
- التمرين الأول يركز على دمج مستشعر درجة الحرارة مع شاشة LCD وعرض القراءة.
- التمرين الثاني يركز على دمج لوحة مفاتيح رقمية مع شاشة LCD وعرض المدخلات.
- كلا التمرينين يتطلبان إنشاء دائرة افتراضية في برنامج تينكركاد وبرمجتها بلغة C++.