شِفر (کود) آردوینو برای استفاده از جویاستیک دو محوره (X و Y) با صفحهنمایش LCD نوکیا 5110
این آموزش شما را در فرایند استفاده از جویاستیک دومحوره XY برای کنترل یک نقطه نمایش دادهشده روی صفحهنمایش Nokia 5110 LCD راهنمایی میکند. این پروژه شامل خواندن موقعیت جویاستیک و بهروزرسانی نمایش مطابق آن است. تا پایان این راهنما، شما یک راهاندازی عملیاتی خواهید داشت که با حرکت جویاستیک، موقعیت یک نقطه روی صفحه تغییر میکند (در ویدیو در 00:00).

در این پروژه، شما از خروجیهای آنالوگ جویاستیک برای تعیین موقعیت آن روی محورهای X و Y استفاده خواهید کرد. خوانشهای جویاستیک به ابعاد صفحهنمایش LCD نگاشت میشوند تا حرکت روان نقطه ممکن شود. علاوه بر این، شما خواهید آموخت چگونه ورودی سوئیچ جویاستیک را بخوانید که میتوان از آن برای تعاملات بیشتر استفاده کرد.
سختافزار به زبان ساده
اجزای اصلی این پروژه شامل آردوینو، جویاستیک دومحوره XY و صفحهنمایش LCD نوکیا 5110 هستند. آردوینو بهعنوان میکروکنترلر عمل میکند، ورودیهای جویاستیک را پردازش کرده و نمایشگر LCD را کنترل میکند.
جویاستیک معمولاً دو پتانسیومتر دارد — یکی برای محور X و یکی برای محور Y. وقتی جویاستیک را حرکت میدهید، این پتانسیومترها مقاومتشان را تغییر میدهند و سطوح ولتاژ متغیر را به پایههای ورودی آنالوگ آردوینو میفرستند. صفحهنمایش LCD نوکیا 5110 از طریق ارتباط SPI کنترل میشود که امکان انتقال کارآمد داده و بهروزرسانی نمایش را فراهم میکند.
جزئیات مشخصات فنی
| تولیدکننده | تگزاس اینسترومنتس |
|---|---|
| شماره قطعه | L293D |
| ولتاژ منطق/ورودی-خروجی | 5 ولت |
| ولتاژ تغذیه | 4.5-36 V |
| جریان خروجی (برای هر کانال) | ۶۰۰ میلیآمپر |
| جریان پیک (برای هر کانال) | 1.2 A |
| راهنمای فرکانس PWM | 20 کیلوهرتز |
| آستانههای منطقی ورودی | سازگار با TTL |
| افت ولتاژ / Rدرین-تا-سورس (روشن)/ اشباع | حداکثر 1.5 V |
| محدودیتهای حرارتی | 150 °C |
| بسته | DIP-16 |
| یادداشتها / انواع | بهطور گسترده در کاربردهای درایور موتور استفاده میشود |
- برای عملکرد مداوم، از وجود هیتسینک مناسب اطمینان حاصل کنید.
- برای تأمین تغذیه پایدار از خازنهای دکوپلینگ استفاده کنید.
- برای جلوگیری از آسیب دیدن قطعات، مشخصات ولتاژ را بررسی کنید.
- با سیگنالهای PWM محتاط باشید؛ مطمئن شوید که در محدودههای مشخصشده قرار دارند.
- برای جلوگیری از اتصال کوتاه، اتصالات سیمکشی را بررسی کنید.
دستورالعملهای سیمکشی

برای سیمکشی جویاستیک و نمایشگر LCD به آردوینو، با وصل کردن پایه VCC جویاستیک به 5V آردوینو و پایه GND به GND آردوینو شروع کنید. خروجی محور X جویاستیک را به پایه آنالوگA0و خروجی محور Y را به پایه آنالوگA1. خروجی سوئیچ جویاستیک باید به پایه دیجیتال متصل شود2.
برای LCD نوکیا 5110، پایههای زیر را وصل کنید: VCC به 5V، GND به GND، SCE به پایه7, RST به پایه6، D/C به پایه5, DN(MOSI) به پایه11، و SCLK را به پایه13در آخر، پایه LED را از طریق یک مقاومت 330 اهم به پایه وصل کنید9برای کنترل نور پسزمینه.
نمونههای شِفر (کود) و راهنمای گامبهگام
در تابع setup، ارتباط سریال و LCD را مقداردهی اولیه میکنیم. فرمانlcdBegin()پایهها را پیکربندی کرده و نمایشگر را مقداردهی اولیه میکند. کنتراست برای دید بهینه تنظیم شده است.
void setup() {
Serial.begin(9600);
lcdBegin();
setContrast(40);
delay(1000);
clearDisplay(BLACK);
updateDisplay();
}این مؤلفههای لازم پروژه را مقداردهی اولیه میکند و اطمینان میدهد که نمایشگر LCD آماده نمایش اطلاعات است.

در تابع loop، موقعیت جویاستیک را میخوانیم و آن را به ابعاد صفحه نگاشت میکنیم. موقعیت نقطه بر اساس مقادیر 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- نمایش عملکرد
/*
* 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);
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازونخرید LCD نوکیا 5110 از اَمه زونamzn.to
-
آمازونخرید جوی استیک XY از اَمه زونamzn.to
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
فایل مورد نیاز (.h)
-
robojax-nokia5110.h header file for Arduino
robojax-nokia5110.zip0.01 MB -
LCD_Functions. file for Nokia
LCD_Functions.h0.02 MB
فایل فریزینگ
-
ال سی دی نوکیا ۵۱۱۰
Nokia_5110_LCD.fzpz0.03 MB -
جویاستیک سیاه KY-023
Black Joystick KY-023.fzpz0.02 MB