#include <LiquidCrystal.h> // Biblioteca para la LCD
LiquidCrystal lcd(23, 22, 5, 18, 19, 21); // Orden (RS,E,D4,D5,D6,D7)
byte pacman[] = { //dibuja el pacman en la pantalla lcd
B00110,
B01111,
B11100,
B11000,
B11100,
B01111,
B00110,
B00000
};
int x = 34; //pin de conexion del eje X
int lecturax = 0; //lectura del eje X
int y = 35; //pin de conexion del eje Y
int lecturay = 0; //lectura del eje Y
int mapx = 0; //mapeo de pacman en el eje X
int mapy = 0; //mapeo del pacman en el eje Y
int oldMapx = 0; // Almacenar la posición anterior en X
int oldMapy = 0; // Almacenar la posición anterior en Y
void setup() {
Serial.begin(115200); //velocidad del cable de transminsion
lcd.begin(16, 2); //cordenadas del pacman
lcd.createChar(0, pacman); //crear el pacman den la pantalla LCD
lcd.clear(); //limpia la pantalla
pinMode(x, INPUT); //define que el eje X es un pin de entrada
pinMode(y, INPUT); //define que el eje Y es un pin de entranda
Serial.println("Posicionx Posiciony "); // imprimen la lectura de ambos ejes
lcd.setCursor(mapx, mapy); // Establece la posición inicial del cursor
lcd.write((byte)0); // Dibuja el Pacman en la posición inicial
}
void loop() {
// Lee los valores del joystick
lecturax = analogRead(x);
lecturay = analogRead(y);
// Guarda la posición anterior
oldMapx = mapx;
oldMapy = mapy;
// Determina el movimiento en el eje X
if (lecturax < 1000 && mapx < 15) {
mapx++; // Mover a la derecha
} else if (lecturax > 3000 && mapx > 0) {
mapx--; // Mover a la izquierda
}
// Determina el movimiento en el eje Y
if (lecturay < 1000 && mapy < 1) {
mapy++; // Mover hacia abajo
} else if (lecturay > 3000 && mapy > 0) {
mapy--; // Mover hacia arriba
}
// Si la posición ha cambiado, actualiza la pantalla
if (mapx != oldMapx || mapy != oldMapy) {
// Borra el Pacman de la posición anterior
lcd.setCursor(oldMapx, oldMapy);
lcd.print(" "); // Borra el carácter anterior
// Dibuja el Pacman en la nueva posición
lcd.setCursor(mapx, mapy);
lcd.write((byte)0);
}
// Imprime los valores del joystick en el monitor serie
Serial.print(lecturay);
Serial.print(" , ");
Serial.print(lecturax);
Serial.println();
delay(100); // Añade un pequeño retraso para evitar la repetición rápida de lecturas del joystick
}