كود البحث

كود أردوينو لاستخدام عصا تحكم ثنائية المحاور (XY) مع شاشة LCD نوكيا 5110

كود أردوينو لاستخدام عصا تحكم ثنائية المحاور (XY) مع شاشة LCD نوكيا 5110

سيرشدك هذا الدليل التعليمي خلال عملية استخدام عصا تحكم (جوستيك) ثنائية المحاور XY للتحكم في نقطة معروضة على شاشة Nokia 5110 LCD. يتضمن المشروع قراءة موضع الجوستيك وتحديث العرض وفقًا لذلك. بنهاية هذا الدليل، سيكون لديك إعداد عملي حيث يؤدي تحريك الجوستيك إلى تغيير موقع نقطة على الشاشة (في الفيديو عند 00:00).

Nokia 5110_LCD

في هذا المشروع، ستستفيد من المخرجات التناظرية لعصا التحكم لتحديد موضعها على محوري X و Y. ستُحول قراءات عصا التحكم لتتناسب مع أبعاد شاشة LCD، مما يسمح بحركة سلسة للنقطة. بالإضافة إلى ذلك، ستتعلم كيفية قراءة مدخل مفتاح عصا التحكم، الذي يمكن استخدامه لإجراء تفاعلات إضافية.

شرح الأجهزة

المكونات الأساسية لهذا المشروع تشمل الأردوينو، عصا تحكم ثنائية المحور XY، وشاشة LCD نوكيا 5110. يعمل الأردوينو كمتحكم دقيق، يعالج المدخلات من عصا التحكم ويتحكم في شاشة LCD.

عادةً ما تحتوي عصا التحكم على مقاومان متغيران (بوتنشيومتر) — واحد لمحور X وآخر لمحور Y. عند تحريك عصا التحكم تتغير مقاومات هذه البوتنشيومترات، مرسلةً مستويات جهد متغيرة إلى دبابيس الإدخال التناظري في الأردوينو. تُتحكم شاشة LCD نوكيا 5110 عبر واجهة SPI، مما يسمح بنقل بيانات فعال وتحديثات عرض فعّالة.

تفاصيل ورقة البيانات

الشركة المصنعةتكساس إنسترومنتس
رقم القطعةL293D
جهد المنطق/الإدخال والإخراج5 فولت
جهد التغذية4.5-36 فولت
تيار الإخراج (لكل قناة)600 mA
تيار الذروة (لكل قناة)1.2 A
إرشادات تردد PWM20 كيلوهرتز
عتبات منطقية للإدخالمتوافق مع TTL
هبوط الجهد / Rمقاومة المصرف-المصدر أثناء التوصيل / التشبع1.5 فولت كحد أقصى
الحدود الحرارية150 درجة مئوية
حزمةدي آي بي-16
ملاحظات / متغيراتيُستخدم على نطاق واسع في تطبيقات مشغلات المحرك

  • تأكد من وجود مشتت حراري مناسب للتشغيل المستمر.
  • استخدم مكثفات فك الترابط لتغذية كهربائية مستقرة.
  • تحقق من تصنيفات الجهد لتجنب إتلاف المكونات.
  • كن حذراً مع إشارات PWM؛ تأكد من أنها ضمن الحدود المحددة.
  • تحقق من توصيلات الأسلاك لتجنب حدوث قصر كهربائي.

تعليمات التوصيل الكهربائي

Arduino wiring for Nokia 5110 LCD  with Joystick
Arduino wiring for Nokia 5110 LCD with Joystick

لتوصيل عصا التحكم وشاشة LCD بالأردوينو، ابدأ بتوصيل دبوس VCC لعصا التحكم بدبوس 5V في الأردوينو ودبوس GND بدبوس GND في الأردوينو. ثم قم بتوصيل خرج محور X لعصا التحكم إلى الدبوس التناظريA0وخرج محور Y إلى الدبوس التناظريA1. يجب توصيل مخرج مفتاح عصا التحكم بالدبوس الرقمي2.

بالنسبة لشاشة نوكيا 5110 LCD، قم بتوصيل المسامير التالية: VCC إلى 5V، GND إلى GND، SCE إلى الدبوس7، RST إلى الدبوس6, D/C إلى الدبوس5, DN(MOSI) إلى الدبوس11, وSCLK إلى الدبوس13أخيرًا، وصل دبوس الـLED عبر مقاومة 330 أوم إلى الدبوس9للتحكم في إضاءة الخلفية.

أمثلة على الكود وشرح خطوة بخطوة

في دالة الإعداد، نقوم بتهيئة الاتصال التسلسلي وشاشة LCD. الأمرlcdBegin()يقوم بإعداد الدبابيس وتهيئة الشاشة. تم ضبط التباين لتحقيق أفضل وضوح

void setup() {
  Serial.begin(9600);
  lcdBegin(); 
  setContrast(40); 
  delay(1000);
  clearDisplay(BLACK);
  updateDisplay();
}

يقوم هذا بتهيئة المكونات اللازمة للمشروع، مما يضمن أن شاشة LCD جاهزة لعرض المعلومات.

Nokia 5110_LCD back view

في دالة الحلقة، نقرأ موضع عصا التحكم ونحوّله إلى أبعاد الشاشة. يتم تحديث موضع النقطة استنادًا إلى قيم المحور X و Y لعصا التحكم.

void loop() {
  int x = analogRead(A0); // read the x position of joystick
  int y = analogRead(A1); // read the y position of joystick
  int xPos = map(x, 0, 1023, 0, screenWidth); // map x to screen
  int yPos = map(y, 0, 1023, 0, screenHeight); // map y to screen
  setCircle(xPos, yPos, thickness, BLACK, 2); // display the dot
  updateDisplay();
  delay(10);
}

يقوم هذا الكود بتحديث موضع النقطة على شاشة LCD باستمرار اعتمادًا على حركة عصا التحكم

عرض توضيحي / ما الذي تتوقعه

عند تشغيل الدائرة، ستعرض شاشة LCD نقطة. تحريك عصا التحكم سيعيد تموضع النقطة في الوقت الحقيقي وفق حركات العصا على محوري X و Y. إذا تم الضغط على مفتاح عصا التحكم، فقد يؤدي ذلك إلى تفعيل وظائف إضافية يمكنك تنفيذها. كن حذرًا من احتمال وجود مداخل عائمة إذا لم تكن عصا التحكم في المنتصف، مما قد يؤدي إلى تحركات غير متوقعة للنقطة (في الفيديو عند 01:30).

طوابع زمنية للفيديو

  • 00:00- مقدمة عن المشروع
  • 01:30- شرح الأسلاك
  • 02:45- استعراض الكود
  • 04:10- عرض توضيحي للوظائف

الصور

Nokia 5110_LCD back view
Nokia 5110_LCD back view
Arduino wiring for Nokia 5110 LCD  with Joystick
Arduino wiring for Nokia 5110 LCD with Joystick
Nokia 5110_LCD
Nokia 5110_LCD
81-Arduino code: Dual-axis joystick with Nokia 5110 screen to display dots
اللغة: C++
/*
 * This is Arduino code to use a dual-axis XY joystick with a Nokia 5110 screen to move a dot on the screen.
 * It also reads the switch.
 * Other Arduino libraries and videos: https://robojax.com
 
 * Watch the video for this code to learn it fully.
  * Watch the video here: https://youtu.be/zqDZybR5JSE
 * This code is offered "as is" without any warranty.
 * If you are sharing this code, you must keep this copyright note.
 */
 /*
/* Nokia 5100 LCD Example Code with Added Joystick by Robojax
   Graphics driver and PCD8544 interface code for SparkFun's
   84x48 Graphic LCD.
   https://www.sparkfun.com/products/10168
   Original source code:
https://github.com/sparkfun/GraphicLCD_Nokia_5110

  This stuff could all be put into a library, but we wanted to
  leave it all in one sketch to keep it as transparent as possible.

  Hardware: (Note most of these pins can be swapped)
    Graphic LCD Pin ---------- Arduino Pin
       1-VCC       ----------------  5V
       2-GND       ----------------  GND
       3-SCE       ----------------  7
       4-RST       ----------------  6
       5-D/C       ----------------  5
       6-DN(MOSI)  ----------------  11
       7-SCLK      ----------------  13
       8-LED       - 330 Ohm res --  9
   The SCLK, DN(MOSI), must remain where they are, but the other 
   pins can be swapped. The LED pin should remain a PWM-capable
   pin. Don't forget to stick a current-limiting resistor in line
   between the LCD's LED pin and Arduino pin 9!
   Modified by Ahmad S. for Robojax.com
   on Mar 11, 2018 at 20:49 at Ajax, Ontario, Canada
*/
#include <SPI.h>
#include "LCD_Functions.h"

#define sw 2 // pint 2 is used for joystick switch input
#define screenWidth 83 // NOkia screen width
#define screenHeight 47 // Nokia screen height
int thickness =1;// the thickness of the dot


void setup()
{
  // Robojax Dual Axis joystick  with Nokia 5110 LCD screen project
  Serial.begin(9600);

  lcdBegin(); // This will setup our pins, and initialize the LCD
  //updateDisplay(); // with displayMap untouched, SFE logo
  setContrast(40); // Good values range from 40-60
  delay(1000);

  clearDisplay(BLACK);
  updateDisplay();
}


void loop()
{
  clearDisplay(WHITE);  
   // Robojax Dual Axis joystick  with Nokia 5110 LCD screen project
  int x = analogRead(A0);// read the x position of joystick
  int y = analogRead(A1); // read the y position of joystick
  int xPos = map(x, 0, 1023,0,screenWidth);// map or translate the x of joystick to x of screen
  int yPos = map(y, 0, 1023,0,screenHeight); // map or translate the y of joystick to y of screen
  int sStat = digitalRead(sw);//read the switch from pin 2
  Serial.print("X: ");
  Serial.print(xPos);
  Serial.print(" Y: ");
  Serial.println(yPos);// Robojax prints y

  // Robojax Dual Axis joystick  with Nokia 5110 LCD screen project
   //setCircle(xPos, yPos, thicness, BLACK, 2);
   // xPos is the position of x
   // yPos is the position of y
   // thickness
  setCircle(xPos, yPos, thickness, BLACK, 2);// display the dot on the screen
    updateDisplay();
  delay(10);


}

الأشياء التي قد تحتاجها

الموارد والمراجع

ملفات📁

Fritzing File