Code de recherche

Code Arduino pour utiliser un joystick XY à deux axes avec un écran LCD Nokia 5110

Code Arduino pour utiliser un joystick XY à deux axes avec un écran LCD Nokia 5110

Ce tutoriel vous guidera à travers le processus d'utilisation d'un joystick XY à double axe pour contrôler un point affiché sur un écran LCD Nokia 5110. Le projet consiste à lire la position du joystick et à mettre à jour l'affichage en conséquence. À la fin de ce guide, vous disposerez d'une configuration fonctionnelle dans laquelle le déplacement du joystick modifie la position d'un point à l'écran (dans la vidéo à 00:00).

Nokia 5110_LCD

Dans ce projet, vous utiliserez les sorties analogiques du joystick pour déterminer sa position sur les axes X et Y. Les relevés du joystick seront mis en correspondance avec les dimensions de l'écran LCD, ce qui permettra un déplacement fluide du point. De plus, vous apprendrez à lire l'entrée de l'interrupteur du joystick, qui peut être utilisée pour d'autres interactions.

Le matériel expliqué

Les composants principaux de ce projet comprennent l'Arduino, le joystick XY à double axe et l'écran LCD Nokia 5110. L'Arduino sert de microcontrôleur, traitant les entrées du joystick et commandant l'affichage LCD.

Le joystick comporte généralement deux potentiomètres — un pour l'axe X et un pour l'axe Y. Lorsque vous déplacez le joystick, ces potentiomètres modifient leur résistance, envoyant des niveaux de tension variables aux broches d'entrée analogique de l'Arduino. L'écran LCD Nokia 5110 est contrôlé via la communication SPI, ce qui permet un transfert de données efficace et des mises à jour de l'affichage.

Détails de la fiche technique

FabricantTexas Instruments
Numéro de pièceL293D
Tension logique/E/S5 V
Tension d'alimentation4,5 à 36 V
Courant de sortie (par canal)600 mA
Courant de crête (par canal)1.2 A
Directives sur la fréquence PWM20 kHz
Seuils logiques d'entréeCompatible TTL
Chute de tension / RDS(on)/ saturation1,5 V max
Limites thermiques150 °C
PaquetDIP-16
Notes / variantesLargement utilisé dans les applications de commande de moteurs

  • Assurez une dissipation thermique adéquate pour un fonctionnement continu.
  • Utilisez des condensateurs de découplage pour une alimentation stable.
  • Vérifiez les valeurs de tension pour éviter d'endommager les composants.
  • Soyez prudent avec les signaux PWM ; assurez-vous qu'ils sont dans les limites spécifiées.
  • Vérifiez les connexions de câblage pour éviter les courts-circuits.

Instructions de câblage

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

Pour câbler le joystick et l'écran LCD à l'Arduino, commencez par connecter la broche VCC du joystick au 5 V de l'Arduino et la broche GND au GND de l'Arduino. Connectez la sortie de l'axe X du joystick à la broche analogiqueA0et la sortie de l'axe Y vers la broche analogiqueA1. La sortie de l'interrupteur du joystick doit être connectée à la broche numérique2.

Pour l'écran LCD Nokia 5110, connectez les broches suivantes : VCC à 5V, GND à GND, SCE à la broche7, RST sur la broche6, D/C sur la broche5, DN(MOSI) vers la broche11, et SCLK à la broche13. Enfin, connectez la broche de la LED via une résistance de 330 ohms à la broche9pour le contrôle du rétroéclairage.

Exemples de code et guide pas à pas

Dans la fonction setup, nous initialisons la communication série et l'écran LCD. La commandelcdBegin()configure les broches et initialise l'affichage. Le contraste est réglé pour une visibilité optimale.

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

Cela initialise les composants nécessaires au projet, garantissant que l'écran LCD est prêt à afficher des informations.

Nokia 5110_LCD back view

Dans la fonction loop, nous lisons la position du joystick et la mettons à l'échelle par rapport aux dimensions de l'écran. La position du point est mise à jour en fonction des valeurs X et Y du joystick.

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);
}

Ce code met continuellement à jour la position du point sur l'écran LCD en fonction des mouvements du joystick.

Démonstration / À quoi s'attendre

Lorsque vous alimentez le circuit, l'écran LCD affichera un point. Le déplacement du joystick repositionnera le point en temps réel en fonction des mouvements X et Y. Si le bouton du joystick est enfoncé, il peut déclencher des fonctionnalités supplémentaires que vous pouvez implémenter. Faites attention aux entrées flottantes potentielles si le joystick n'est pas centré, ce qui pourrait entraîner des mouvements inattendus du point (dans la vidéo à 01:30).

Horodatages vidéo

  • 00:00- Introduction au projet
  • 01:30- Explication du câblage
  • 02:45- Parcours du code
  • 04:10- Démonstration de la fonctionnalité

Images

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


}

Ce dont vous pourriez avoir besoin

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Fichier requis (.h)

Fichier Fritzing