// Librería para LCD
#include <LiquidCrystal_I2C.h>
// Configuración de la pantalla LCD y LEDs
LiquidCrystal_I2C lcd(0x27, 16, 2); // Direccion I2C y configuración de LCD
int xPin = A0; // Pin analógico para eje X del joystick
int yPin = A1; // Pin analógico para eje Y del joystick
int botonPin = 2; // Pin digital para botón del joystick
int ledCentro = 3;
int ledArriba = 4;
int ledAbajo = 5;
int ledDerecha = 6;
int ledIzquierda = 7;
void setup() {
lcd.begin(16, 2); // Inicia LCD 16x2
lcd.backlight(); // Activa luz de fondo de la LCD
pinMode(botonPin, INPUT); // Configura pin de botón como entrada
pinMode(ledCentro, OUTPUT); // Configura LED para posición centro
pinMode(ledArriba, OUTPUT);
pinMode(ledAbajo, OUTPUT);
pinMode(ledDerecha, OUTPUT);
pinMode(ledIzquierda, OUTPUT);
Serial.begin(9600); // Inicia monitor serial
lcd.print("Posicion Joystick"); // Muestra el título en la LCD
}
void loop() {
int xVal = analogRead(xPin); // Lee el valor del eje X
int yVal = analogRead(yPin); // Lee el valor del eje Y
Serial.print("X: ");
Serial.print(xVal);
Serial.print(" Y: ");
Serial.println(yVal);
lcd.setCursor(0, 1); // Ubicación en la segunda línea de LCD
apagarLeds(); // Apaga todos los LEDs para actualizar posición
// Condiciones de posición del joystick
if (xVal > 450 && xVal < 550 && yVal > 450 && yVal < 550) {
lcd.print("CENTRO");
digitalWrite(ledCentro, HIGH);
} else if (xVal < 450 && yVal > 450 && yVal < 550) {
lcd.print("IZQUIERDA");
digitalWrite(ledIzquierda, HIGH);
} else if (xVal > 550 && yVal > 450 && yVal < 550) {
lcd.print("DERECHA");
digitalWrite(ledDerecha, HIGH);
} else if (yVal < 450 && xVal > 450 && xVal < 550) {
lcd.print("ARRIBA");
digitalWrite(ledArriba, HIGH);
} else if (yVal > 550 && xVal > 450 && xVal < 550) {
lcd.print("ABAJO");
digitalWrite(ledAbajo, HIGH);
} else if (xVal < 450 && yVal < 450) {
lcd.print("IZQUIERDA ARRIBA");
digitalWrite(ledIzquierda, HIGH);
digitalWrite(ledArriba, HIGH);
} else if (xVal > 550 && yVal < 450) {
lcd.print("DERECHA ARRIBA");
digitalWrite(ledDerecha, HIGH);
digitalWrite(ledArriba, HIGH);
} else if (xVal < 450 && yVal > 550) {
lcd.print("IZQUIERDA ABAJO");
digitalWrite(ledIzquierda, HIGH);
digitalWrite(ledAbajo, HIGH);
} else if (xVal > 550 && yVal > 550) {
lcd.print("DERECHA ABAJO");
digitalWrite(ledDerecha, HIGH);
digitalWrite(ledAbajo, HIGH);
}
delay(1000); // Retardo para actualizar la posición
}
void apagarLeds() {
digitalWrite(ledCentro, LOW);
digitalWrite(ledArriba, LOW);
digitalWrite(ledAbajo, LOW);
digitalWrite(ledDerecha, LOW);
digitalWrite(ledIzquierda, LOW);
}