Arduino-code om een dual-axis XY-joystick te gebruiken met een Nokia 5110 LCD-scherm
Deze tutorial begeleidt je door het proces van het gebruik van een tweeassige XY-joystick om een stip op een Nokia 5110 LCD-scherm te besturen. Het project omvat het uitlezen van de joystickpositie en het dienovereenkomstig bijwerken van het display. Aan het einde van deze handleiding heb je een functionele opstelling waarbij het bewegen van de joystick de positie van een stip op het scherm verandert (in video op 00:00).

In dit project gebruik je de analoge uitgangen van de joystick om de positie op de X- en Y-assen te bepalen. De uitlezingen van de joystick worden gekoppeld aan de afmetingen van het LCD-scherm, waardoor een vloeiende beweging van de stip mogelijk is. Daarnaast leer je hoe je de schakelaaringang van de joystick uitleest, die kan worden gebruikt voor verdere interacties.
Hardware Uitgelegd
De belangrijkste componenten voor dit project zijn de Arduino, de tweeassige XY-joystick en het Nokia 5110 LCD-scherm. De Arduino fungeert als microcontroller, verwerkt invoer van de joystick en bestuurt het LCD-display.
De joystick heeft doorgaans twee potentiometers—één voor de X-as en één voor de Y-as. Wanneer je de joystick beweegt, veranderen deze potentiometers van weerstand en sturen ze variërende spanningsniveaus naar de analoge ingangspinnen van de Arduino. Het Nokia 5110 LCD-scherm wordt aangestuurd via SPI-communicatie, wat zorgt voor efficiënte gegevensoverdracht en display-updates.
Datasheet Details
| Fabrikant | Texas Instruments |
|---|---|
| Onderdeelnummer | L293D |
| Logica/IO-spanning | 5 V |
| Voedingsspanning | 4,5–36 V |
| Uitgangsstroom (per kanaal) | 600 mA |
| Piekstroom (per kanaal) | 1,2 A |
| PWM-frequentierichtlijn | 20 kHz |
| Ingangslogische drempels | TTL-compatibel |
| Spanningsval / RDS(on) / verzadiging | 1,5 V max |
| Thermische limieten | 150 °C |
| Behuizing | DIP-16 |
| Opmerkingen / varianten | Veel gebruikt in motoraandrijvingstoepassingen |
- Zorg voor voldoende koeling voor continue werking.
- Gebruik ontkoppelcondensatoren voor een stabiele voedingsspanning.
- Controleer de spanningswaarden om schade aan de componenten te voorkomen.
- Wees voorzichtig met PWM-signalen; zorg dat ze binnen de gespecificeerde limieten blijven.
- Controleer de bedrading om kortsluiting te voorkomen.
Bedradingsinstructies

Om de joystick en het LCD-scherm op de Arduino aan te sluiten, begin je met het verbinden van de VCC-pin van de joystick met de 5V van de Arduino en de GND-pin met de GND van de Arduino. Verbind de X-as-uitgang van de joystick met analoge pin A0 en de Y-as-uitgang met analoge pin A1. De schakeluitgang van de joystick moet worden verbonden met digitale pin 2.
Voor het Nokia 5110 LCD-scherm verbind je de volgende pinnen: VCC met 5V, GND met GND, SCE met pin 7, RST met pin 6, D/C met pin 5, DN(MOSI) met pin 11 en SCLK met pin 13. Verbind ten slotte de LED-pin via een 330 Ohm-weerstand met pin 9 voor achtergrondverlichtingsregeling.
Codevoorbeelden & Uitleg
In de setup-functie initialiseren we de seriële communicatie en het LCD. Het commando lcdBegin() stelt de pinnen in en initialiseert het display. Het contrast wordt ingesteld voor optimale zichtbaarheid.
void setup() {
Serial.begin(9600);
lcdBegin();
setContrast(40);
delay(1000);
clearDisplay(BLACK);
updateDisplay();
}
Dit initialiseert de benodigde componenten voor het project en zorgt ervoor dat het LCD klaar is om informatie weer te geven.

In de loop-functie lezen we de positie van de joystick en koppelen deze aan de schermafmetingen. De positie van de stip wordt bijgewerkt op basis van de X- en Y-waarden van de joystick.
void loop() {
int x = analogRead(A0); // lees de x-positie van de joystick
int y = analogRead(A1); // lees de y-positie van de joystick
int xPos = map(x, 0, 1023, 0, screenWidth); // koppel x aan het scherm
int yPos = map(y, 0, 1023, 0, screenHeight); // koppel y aan het scherm
setCircle(xPos, yPos, thickness, BLACK, 2); // toon de stip
updateDisplay();
delay(10);
}
Deze code werkt continu de positie van de stip op het LCD bij op basis van de beweging van de joystick.
Demonstratie / Wat te Verwachten
Wanneer je het circuit inschakelt, toont het LCD een stip. Het bewegen van de joystick verplaatst de stip in realtime volgens de X- en Y-bewegingen van de joystick. Als de joystickschakelaar wordt ingedrukt, kan dit extra functionaliteiten activeren die je mogelijk implementeert. Wees je bewust van mogelijke zwevende ingangen als de joystick niet gecentreerd is, wat kan leiden tot onverwachte bewegingen van de stip (in video op 01:30).
Videotijdstempels
- 00:00 - Introductie van het project
- 01:30 - Uitleg over de bedrading
- 02:45 - Code-uitleg
- 04:10 - Demonstratie van de functionaliteit
/*
* 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);
}
Dingen die je misschien nodig hebt
-
Amazon
-
AmazonPurchase XY Joystick from Amazonamzn.to
Hulpmiddelen en referenties
Nog geen middelen.
Bestanden📁
Vereist bestand (.h)
-
robojax-nokia5110.h header file for Arduino
robojax-nokia5110.zip0.01 MB -
LCD_Functions. file for Nokia
LCD_Functions.h0.02 MB
Fritzing-bestand
-
Nokia 5110 LCD
Nokia_5110_LCD.fzpz0.03 MB -
Black Joystick KY-023
Black Joystick KY-023.fzpz0.02 MB