Código Arduino para usar um joystick XY de dois eixos com uma tela LCD Nokia 5110
Este tutorial irá guiá-lo através do processo de utilização de um joystick XY de dois eixos para controlar um ponto exibido num ecrã LCD Nokia 5110. O projeto envolve ler a posição do joystick e atualizar o ecrã em conformidade. No final deste guia, terá uma configuração funcional em que mover o joystick altera a posição de um ponto no ecrã (no vídeo em 00:00).

Neste projeto, você utilizará as saídas analógicas do joystick para determinar sua posição nos eixos X e Y. As leituras do joystick serão mapeadas para as dimensões da tela LCD, permitindo que o ponto se mova suavemente. Além disso, você aprenderá a ler a entrada do interruptor do joystick, que pode ser usada para interações adicionais.
Hardware Explicado
Os componentes principais deste projeto incluem o Arduino, o joystick XY de dois eixos e o display LCD Nokia 5110. O Arduino atua como microcontrolador, processando as entradas do joystick e controlando o display LCD.
O joystick normalmente tem dois potenciômetros, um para o eixo X e outro para o eixo Y. À medida que você move o joystick, esses potenciômetros alteram a resistência, enviando níveis de tensão variáveis para os pinos de entrada analógica do Arduino. A tela LCD Nokia 5110 é controlada via comunicação SPI, o que permite transferência eficiente de dados e atualizações do display.
Detalhes da ficha técnica
| Fabricante | Texas Instruments |
|---|---|
| Número da peça | L293D |
| Tensão lógica/E/S | 5 V |
| Tensão de alimentação | 4,5-36 V |
| Corrente de saída (por canal) | 600 mA |
| Corrente de pico (por canal) | 1.2 A |
| Orientação sobre a frequência PWM | 20 kHz |
| Limiares lógicos de entrada | compatível com TTL |
| Queda de tensão / RDS(ligado) / saturação | 1.5 V máx. |
| Limites térmicos | 150 °C |
| Pacote | DIP-16 |
| Notas / variantes | Amplamente utilizado em aplicações de acionamento de motor |
- Assegure a dissipação de calor adequada para operação contínua.
- Use capacitores de desacoplamento para uma alimentação estável.
- Verifique as classificações de tensão para evitar danificar os componentes.
- Tenha cuidado com os sinais PWM; certifique-se de que estejam dentro dos limites especificados.
- Verifique as conexões da fiação para evitar curtos-circuitos.
Instruções de fiação

Para ligar o joystick e o ecrã LCD ao Arduino, comece por ligar o pino VCC do joystick ao 5V do Arduino e o pino GND ao GND do Arduino. Ligue a saída do eixo X do joystick ao pino analógicoA0e a saída do eixo Y para o pino analógicoA1. A saída do interruptor do joystick deve ser conectada ao pino digital2.
Para o LCD Nokia 5110, conecte os seguintes pinos: VCC a 5V, GND a GND, SCE ao pino7, RST ao pino6, D/C para pino5, DN(MOSI) ao pino11, e SCLK ao pino13. Por fim, conecte o pino do LED através de um resistor de 330 Ohm ao pino9para controle da retroiluminação
Exemplos de código e tutorial passo a passo
Na função setup(), inicializamos a comunicação serial e o LCD. O comandolcdBegin()Configura os pinos e inicializa o display. O contraste é ajustado para visibilidade ideal.
void setup() {
Serial.begin(9600);
lcdBegin();
setContrast(40);
delay(1000);
clearDisplay(BLACK);
updateDisplay();
}Isso inicializa os componentes necessários para o projeto, garantindo que o LCD esteja pronto para exibir informações.

Na função loop, lemos a posição do joystick e a mapeamos para as dimensões da tela. A posição do ponto é atualizada com base nos valores X e Y do 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 atualiza continuamente a posição do ponto na tela LCD com base no movimento do joystick.
Demonstração / O que esperar
Ao ligar o circuito, o LCD exibirá um ponto. Mover o joystick reposicionará o ponto em tempo real de acordo com os movimentos X e Y do joystick. Se o interruptor do joystick for pressionado, isso pode acionar funcionalidades adicionais que você pode implementar. Esteja ciente de possíveis entradas flutuantes se o joystick não estiver centralizado, o que pode levar a movimentos inesperados do ponto (no vídeo em 01:30).
Marcas de tempo do vídeo
- 00:00- Introdução ao projeto
- 01:30- Explicação da fiação
- 02:45- Passo a passo do código
- 04:10- Demonstração da funcionalidade
/*
* 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);
}
Coisas que você pode precisar
-
AmazonasCompre o Joystick XY na Amazonamzn.to
-
Amazonas
Recursos e referências
Arquivos📁
Arquivo Fritzing
-
LCD Nokia 5110
Nokia_5110_LCD.fzpz0.03 MB -
Joystick Preto KY-023
Black Joystick KY-023.fzpz0.02 MB