Código de búsqueda

Código de Arduino para usar un joystick XY de doble eje con una pantalla LCD Nokia 5110

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

Nokia 5110_LCD

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

FabricanteTexas Instruments
Número de piezaL293D
Voltaje lógico/E/S5 V
Tensión de alimentación4.5-36 V
Corriente de salida (por canal)600 mA
Corriente de pico (por canal)1.2 A
Guía de frecuencia PWM20 kHz
Umbrales lógicos de entradaCompatible con TTL
Caída de tensión / RDS(en conducción) / saturación1.5 V máx.
Límites térmicos150 °C
PaqueteDIP de 16
Notas / variantesAmpliamente 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

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

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.

Nokia 5110_LCD back view

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

Imágenes

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


}

Cosas que podrías necesitar

Recursos y referencias

Archivos📁

Archivo de Fritzing