SHKEYPAD
Programa de ejemplo para Arduino:
// Programa de prueba para el Arduino LCD Key Pad
#include <LiquidCrystal.h>
// Pines donde se encuentra conectado el LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define ENTRADA_BOTON_ADC 0 // Canal analógico donde esán conectados los botones
#define BOTON_RIGHT 0
#define BOTON_UP 1
#define BOTON_DOWN 2
#define BOTON_LEFT 3
#define BOTON_SELECT 4
#define BOTON_NO_PULSADO 5
int boton = 0;
int boton_adc = 0;
int lectura_adc = 0;
void setup()
{
lcd.begin(16, 2); // Inicializamos la librería
lcd.clear();
lcd.setCursor(0, 0); // Mensaje en la primera línea
lcd.print("Pulsa un boton ");
}
void loop()
{
boton_adc = analogRead(ENTRADA_BOTON_ADC); // Leemos el boton
boton = convierte_boton_adc(boton_adc); // convertimos el valor leido al boton pulsado
lcd.setCursor(0, 1); // Nos posicionamos al comienzo de la segunda línea del LCD
switch (boton) // mostramos el boton pulsado
{
case BOTON_RIGHT:
{
lcd.print("RIGHT ");
break;
}
case BOTON_LEFT:
{
lcd.print("LEFT ");
break;
}
case BOTON_UP:
{
lcd.print("UP ");
break;
}
case BOTON_DOWN:
{
lcd.print("DOWN ");
break;
}
case BOTON_SELECT:
{
lcd.print("SELECT ");
break;
}
case BOTON_NO_PULSADO:
{
lcd.print("No pulsado");
break;
}
}
// Muestra el valor analógico de la entrada de los botones
// puedes usar esta medida para ajustar mejor los niveles de comparación
// para cada boton
lcd.setCursor(11, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(boton_adc);
// No es necesario actualizar la información más rápido que lo que podemos percibir con la vista
delay(100);
}
// Convertimos la lectura del boton
int convierte_boton_adc(int lectura_adc)
{
if (lectura_adc > 1000) return BOTON_NO_PULSADO; // Comprobamos primero la opción más probable
// Los siguientes valores representan un incremento de unas 50 cuentas sobre el valor analógico
// medido para cada boton. Puedes ajustar estos valores para un mejor funcionamiento del teclado
if (lectura_adc < 50) return BOTON_RIGHT;
if (lectura_adc < 150) return BOTON_UP;
if (lectura_adc < 300) return BOTON_DOWN;
if (lectura_adc < 450) return BOTON_LEFT;
if (lectura_adc < 650) return BOTON_SELECT;
return BOTON_NO_PULSADO; // Por si no detectamos el boton pulsado...
}