Search Code

Arduino-code om een dual-axis XY-joystick te gebruiken met een Nokia 5110 LCD-scherm

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).

Nokia 5110_LCD

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

FabrikantTexas Instruments
OnderdeelnummerL293D
Logica/IO-spanning5 V
Voedingsspanning4,5–36 V
Uitgangsstroom (per kanaal)600 mA
Piekstroom (per kanaal)1,2 A
PWM-frequentierichtlijn20 kHz
Ingangslogische drempelsTTL-compatibel
Spanningsval / RDS(on) / verzadiging1,5 V max
Thermische limieten150 °C
BehuizingDIP-16
Opmerkingen / variantenVeel 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

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

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.

Nokia 5110_LCD back view

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

Afbeeldingen

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
Taal: 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);


}

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Nog geen middelen.

Bestanden📁

Vereist bestand (.h)

Fritzing-bestand