Ayuda con lcd Keypad

Hola a todos

soy nuevo por aqui,
trato de entender la programacion para realizar algunos proyectos que tengo

en el .ino que adjunto, no se si esta bien adjuntarlo asi
define p.e. #define btnUP 1 que creo quiere decir que tenga el valor 1 ,pero luego no se para que lo emplea si en el condicional dice btnUP

gracias por vuestra ayuda.saludos

lcd_keypad.ino (2.15 KB)

#define btnUP 1 es una directiva para el compilador para reemplazar btnUP por 1, asi que cada vez que en tu codigo leas btnUP será reemplazado por uno. Eso hace mas legible el código para cualquiera.

Bueno es un código que usa el shield LCD 2x16 mas los botones de menu comandos por el conversor AD0 del Arduino UNO por ejemplo.
Cada vez que presiones un boton el conversor AD0 dará una lectura comprendida entre los valores aquí indicados

if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result 
if (adc_key_in < 50)   return btnRIGHT;   
if (adc_key_in < 195)  return btnUP;  
if (adc_key_in < 380)  return btnDOWN;  
if (adc_key_in < 555)  return btnLEFT;  
if (adc_key_in < 790)  return btnSELECT;

entonces según caiga en algun if devolverá un botón o mejor dicho un número previamente definido por los #define correspondientes.

Luego en función del boton presionado tendrás una salida por el LCD según esto

switch (lcd_key)               // depending on which button was pushed, we perform an action 
{ 
  case btnRIGHT: 
    { 
    lcd.print("RIGHT "); 
    break; 
    } 
  case btnLEFT: 
    { 
    lcd.print("LEFT   "); 
    break; 
    } 
  case btnUP: 
    { 
    lcd.print("UP    "); 
    break; 
    } 
  case btnDOWN: 
    { 
    lcd.print("DOWN  "); 
    break; 
    } 
  case btnSELECT: 
    { 
    lcd.print("SELECT"); 
    break; 
    } 
    case btnNONE: 
    { 
    lcd.print("NONE  "); 
    break; 
    } 
}

Ahora te explicaré solo un caso para que se vea todo el programa.
Supongamos que presionas btnUP o sea como ya dije, 1.
Segun el código, el AD0 debe leer algo entre
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
o sea 50< AD0 < 195 todo lo que caiga entre 50 y 195 devolverá btnUP = 1

todo esto ocurre dentro del loop, previamente se configuraron los puertos de entrada salida, se inicializó el lcd
se imprime en la linea 1 del lcd en la posicion 0, Push the buttons"
ahora estamos en el loop
Se imprime los segundos transcurridos desde el arranque
y se lee como dije el boton presionado.
Segun su número saldrá un cartel en la linea 2, posicion 0, que será "UP "