Código de Arduino para usar un joystick XY de doble eje con una pantalla LCD Nokia 5110
Este tutorial le guiará a través del proceso de uso de un joystick XY de doble eje para controlar un punto mostrado en una pantalla LCD Nokia 5110. El proyecto consiste en leer la posición del joystick y actualizar la pantalla en consecuencia. Al final de esta guía, dispondrá de una configuración funcional en la que mover el joystick altera la posición de un punto en la pantalla (en el vídeo en 00:00).

En este proyecto, utilizarás las salidas analógicas del joystick para determinar su posición en los ejes X e Y. Las lecturas del joystick se mapearán a las dimensiones de la pantalla LCD, permitiendo un movimiento suave del punto. Además, aprenderás cómo leer la entrada del interruptor del joystick, que puede utilizarse para interacciones adicionales.
Hardware explicado
Los componentes principales de este proyecto incluyen el Arduino, el joystick XY de doble eje y la pantalla LCD Nokia 5110. El Arduino funciona como el microcontrolador, procesando las entradas del joystick y controlando la pantalla LCD.
El joystick típicamente tiene dos potenciómetros: uno para el eje X y otro para el eje Y. Al mover el joystick, estos potenciómetros cambian su resistencia, enviando niveles de voltaje variables a los pines de entrada analógica del Arduino. La pantalla LCD Nokia 5110 se controla mediante comunicación SPI, lo que permite una transferencia eficiente de datos y actualizaciones de la pantalla.
Detalles de la ficha técnica
| Fabricante | Texas Instruments |
|---|---|
| Número de pieza | L293D |
| Voltaje lógico/E/S | 5 V |
| Tensión de alimentación | 4.5-36 V |
| Corriente de salida (por canal) | 600 mA |
| Corriente de pico (por canal) | 1.2 A |
| Guía de frecuencia PWM | 20 kHz |
| Umbrales lógicos de entrada | Compatible con TTL |
| Caída de tensión / RDS(en conducción) / saturación | 1.5 V máx. |
| Límites térmicos | 150 °C |
| Paquete | DIP de 16 |
| Notas / variantes | Ampliamente utilizado en aplicaciones de controladores de motores |
- Asegúrese de una disipación de calor adecuada para el funcionamiento continuo.
- Utilice condensadores de desacoplo para un suministro de energía estable.
- Compruebe las especificaciones de voltaje para evitar dañar los componentes.
- Tenga cuidado con las señales PWM; asegúrese de que estén dentro de los límites especificados.
- Verifique las conexiones del cableado para evitar cortocircuitos.
Instrucciones de cableado

Para cablear el joystick y la pantalla LCD al Arduino, comience conectando el pin VCC del joystick al 5V del Arduino y el pin GND al GND del Arduino. Conecte la salida del eje X del joystick al pin analógicoA0y la salida del eje Y al pin analógicoA1. La salida del interruptor del joystick debe conectarse al pin digital2.
Para la pantalla Nokia 5110 LCD, conecte los siguientes pines: VCC a 5V, GND a GND, SCE al pin7, RST al pin6, D/C al pin5, DN(MOSI) al pin11, y SCLK al pin13. Por último, conecta el pin del LED a través de una resistencia de 330 ohmios al pin9para el control de la retroiluminación.
Ejemplos de código y guía paso a paso
En la función setup, inicializamos la comunicación serie y la LCD. El comandolcdBegin()Configura los pines e inicializa la pantalla. El contraste se ajusta para una visibilidad óptima.
void setup() {
Serial.begin(9600);
lcdBegin();
setContrast(40);
delay(1000);
clearDisplay(BLACK);
updateDisplay();
}Esto inicializa los componentes necesarios para el proyecto, asegurando que la pantalla LCD esté lista para mostrar información.

En la función loop, leemos la posición del joystick y la mapeamos a las dimensiones de la pantalla. La posición del punto se actualiza en función de los valores X e Y del 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);
}Este código actualiza continuamente la posición del punto en la pantalla LCD en función del movimiento del joystick.
Demostración / Qué esperar
Al encender el circuito, la pantalla LCD mostrará un punto. Al mover el joystick, el punto se reposicionará en tiempo real según los movimientos X e Y del joystick. Si se pulsa el interruptor del joystick, puede activar funcionalidades adicionales que pueda implementar. Tenga en cuenta las posibles entradas flotantes si el joystick no está centrado, lo que podría provocar movimientos inesperados del punto (en el vídeo en 01:30).
Marcas de tiempo del vídeo
- 00:00- Introducción al proyecto
- 01:30- Explicación del cableado
- 02:45- Recorrido por el código
- 04:10- Demostración de la funcionalidad
/*
* 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);
}
Cosas que podrías necesitar
-
Amazonas
-
AmazonasComprar el Joystick XY en Amazonamzn.to
Recursos y referencias
Archivos📁
Archivo de Fritzing
-
Nokia 5110 LCD
Nokia_5110_LCD.fzpz0.03 MB -
Joystick Negro KY-023
Black Joystick KY-023.fzpz0.02 MB