
#include <LiquidCrystal.h>    //Funciones del LCD
 
 
//Indica a la librería los pines de conexión del shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
 
//Varables para leer las teclas y el ADC
int lcd_key     = 0;
const int pinLED = 13;
const int pinJoyX = A1;
const int pinJoyY = A2;
const int pinJoyButton = 2;


//Contantes para identificar las teclas
#define btnDERECHA      0
#define btnARRIBA      1
#define btnABAJO       2
#define btnIZQUIERDA   3
#define btnSELECT      4
#define btnNADA        5
 


 void setup() {
  // Inicializaciones
  pinMode(pinJoyButton , INPUT_PULLUP);   //activar resistencia pull up 
  Serial.begin(9600);
  lcd.begin(16, 2);                 //LCD de 16 columnas y 2 filas
  lcd.clear();                      //Borrar la pantalla
  lcd.setCursor(0, 0);              //Llevar el cursor al inicio
  lcd.print("Prueba de teclas:"); 
 
}

void loop() {
   int Xvalue = 0;
   int Yvalue = 0;
   bool buttonValue = false;
 
   //leer valores
   Xvalue = analogRead(pinJoyX);
   delay(50);                 //es necesaria una pequeña pausa entre lecturas analógicas
   Yvalue = analogRead(pinJoyY);
   
   buttonValue = digitalRead(pinJoyButton);

   if (Xvalue>800) lcd_key=btnDERECHA;
   if (Xvalue<300) lcd_key=btnIZQUIERDA;
   if (Yvalue>800) lcd_key=btnABAJO;
   if (Yvalue<300) lcd_key=btnARRIBA;
   if (buttonValue==false) lcd_key=btnSELECT;
 
   //mostrar valores por serial
   Serial.print("X:" );
   Serial.print(Xvalue);
   Serial.print(" | Y: ");
   Serial.print(Yvalue);
   Serial.print(" | Pulsador: ");
   Serial.println(buttonValue);
   

   lcd.setCursor(0,1);            // Lleva el cursor al inicio de la segunda linea

   switch (lcd_key)               // Imprime un texto según el valor de la tecla detectada
 {
   case btnDERECHA:
     {
             //"                "
     lcd.print("DERECHA  ");
     break;
     }
   case btnIZQUIERDA:
     {
     lcd.print("IZQUIERDA");
     break;
     }
   case btnARRIBA:
     {
     lcd.print("ARRIBA   ");
     break;
     }
   case btnABAJO:
     {
     lcd.print("ABAJO    ");
     break;
     }
   case btnSELECT:
     {
     lcd.print("SELECT   ");
     break;
     }
 }
    
}
