مقدمة
في هذا الدرس سنستخدم لوحة الاردوينو وعصا التحكم والشاشة الكرستالية؛ لتتعرف على برمجة عصا التحكم وطباعة الاتجاهات على المحور. (x,y) على الشاشة الكرستالية
المواد والأدوات
1× اردوينو اونو
1× 40 رأس دبوس
1× 2C / IIC Serial Interface Module
1× عصا التحكم
توصيل الدائرة
لمعرفة المزيد حول الشاشة الكرستالية يمكنك الرجوع للدرس التحكم بالشاشة الكرستالية LCD.
لابد من تلحيم المنافذ مع الشاشة الكرستالية، للمزيد حول اللحام يمكنك الرجوع للدرس تعلم كيفية التلحيم – تلحيم القطع باللوحة الإلكترونية
البرمجة
ارفع الكود البرمجي الخاص بمشروع تحديد الاتجاهات على لوحة الاردوينو باستخدام بيئة تطوير الاردوينو IDE.
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { analogReference(DEFAULT); pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT); pinMode(A2, INPUT); lcd.begin(); } void loop() { int X, Y, P ; Y = analogRead(A1); X = analogRead(A2); P = digitalRead(A0); lcd.setCursor(0, 0); if ((480 <= X) & (530 >= X) & (480 <= Y) & (530 >= Y)) { } if ((531 <= X) & (480 <= Y) & (530 >= Y)) { lcd.print("UP"); } if ((X <= 479) & (480 <= Y) & (530 >= Y)) { lcd.print("Down"); } if ((480 <= X) & (530 >= X) & (531 <= Y)) { lcd.print("Right"); } if ((480 <= X) & (530 >= X) & (Y <= 479)) { lcd.print("Left"); } if ((531 <= X) & (531 <= Y)) { lcd.print("UP and Right"); } if ((531 <= X) & (Y <= 479)) { lcd.print("UP and Left"); } if ((X <= 479) & (531 <= Y)) { lcd.print("Down and Right"); } if ((X <= 479) & (Y <= 479)) { lcd.print("Down and Left"); } if (P == 0) { lcd.setCursor(0, 1); lcd.print("PUSH"); } delay(300); lcd.clear(); }
شرح الكود البرمجي
سنقوم في البداية باستدعاء مكتبة (LiquidCrystal_I2C.h) الخاصة بوحدة i2c والتي تحتوي على مجموعة أوامر برمجية نحتاجها في مشروع تحديد الاتجاهات.
ثم نضيفها للاردوينو IDE.
بتتبع المسار التالي:
Sketch > Include libraries > Add ZIP library .
ونضيف المجلد الذي قمنا بتحميله.
#include <LiquidCrystal_I2C.h>
نعرف عنوان وحدة i2c.
LiquidCrystal_I2C lcd(0x27, 16, 2);
في الدالة ()setup سنعرف متغيرات عصا التحكم والتي ستكون كمدخلات.
وسنقوم بتهيئة الشاشة الكرستالية استعدادًا لطباعة المخرجات.
void setup() { analogReference(DEFAULT); pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT); pinMode(A2, INPUT); lcd.begin(); }
في الدالة ()loop سنقوم بقراءة البيانات من عصا التحكم وعلى أساس تلك المدخلات سيتم تحديد الجهة وطباعة الجهة على الشاشة الكرستالية.
الجهات التي سيتم قراءتها وطباعتها على الشاشة:
(الأعلى- الأسفل-يمين-يسار- أعلى اليسار-أعلى اليمين-أسفل اليسار-أسفل اليمين).
void loop() { int X, Y, P ; Y = analogRead(A1); X = analogRead(A2); P = digitalRead(A0); lcd.setCursor(0, 0); if ((480 <= X) & (530 >= X) & (480 <= Y) & (530 >= Y)) { } if ((531 <= X) & (480 <= Y) & (530 >= Y)) { lcd.print("UP"); } if ((X <= 479) & (480 <= Y) & (530 >= Y)) { lcd.print("Down"); } if ((480 <= X) & (530 >= X) & (531 <= Y)) { lcd.print("Right"); } if ((480 <= X) & (530 >= X) & (Y <= 479)) { lcd.print("Left"); } if ((531 <= X) & (531 <= Y)) { lcd.print("UP and Right"); } if ((531 <= X) & (Y <= 479)) { lcd.print("UP and Left"); } if ((X <= 479) & (531 <= Y)) { lcd.print("Down and Right"); } if ((X <= 479) & (Y <= 479)) { lcd.print("Down and Left"); } if (P == 0) { lcd.setCursor(0, 1); lcd.print("PUSH"); } delay(300); lcd.clear(); }
بعد اكتمال عملية الرفع يمكنك اختبار نظام تحديد الاتجاهات.
لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.