En anteriores tutoriales hemos visto como podemos imprimir en una pantalla LCD texto y datos para poder mostrarlos al usuario de la electrónica que estemos diseñando. Si te has fijado todos los tutoriales los he realizado con la LCD KeyPad Shield, lo cual no solo tiene una pantalla LCD de caracteres sino que también tienen un pequeño teclado formado por 5 botones más el de Reset del microcontrolador.
Toca aprender como usar los botones del la LCD Keypad Shield, la cual yo he conseguido gracias a los compañeros de GearBest y que tu puedes conseguir desde aquí.
¿Cómo funciona la LCD KeyPad Shield?
A pesar de lo que puedas pensar a primera vista, para controlar los 5 botones no se usan 5 pines digitales como haríamos con el método tradicional, sino que solo usamos un pin analógico. En él podemos medir distintos niveles de tensión según el botón que pulsemos. Está técnica aunque no nos permite hacer lecturas rápidas de cambio de botón, hay que reconocer que es una decisión muy inteligente por parte de los creadores de la placa.
Aun así, no te lleves las manos a la cabeza, no es una «cosa» difícil de controlar puesto que tanto si usas la función que te dejo a continuación como si lo haces a pelo, leer que botón se ha pulsado no es nada difícil de conseguir.
int read_LCD_buttons() { adc_key_in = analogRead(0); if (adc_key_in < 50) return 1; if (adc_key_in < 250) return 2; if (adc_key_in < 450) return 3; if (adc_key_in < 650) return 4; if (adc_key_in < 850) return 5; return 0; }
Básicamente lo que hace la función es analizar el pin analógico A0 y comprobar cual es su nivel de tensión, si se pulsa alguno de los botones nos devolverá el número del botón pulsado, que en este caso serán:
- Derecho
- Arriba
- Abajo
- Izquierda
- Selección
De esta forma llamando a la función podemos saber que botón se ha pulsado. Una vez que sabemos esto vamos te dejo con el siguiente vídeo para que veas un poco más en profundidad como usar la shield y un poco más abajo tienes el código que uso en el vídeo.
Código para leer los botones de la keyshield
En este ejemplo, no usamos la función sino que integramos la verificación de que botón se ha pulsado directamente en nuestro código.
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int analogico = 0; void setup() { lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print("RI con GearBest"); } void loop() { lcd.setCursor(0,1); analogico = analogRead(0); if( analogico >= 900) lcd.print(" "); else if( analogico >= 600) lcd.print("Seleccion "); else if (analogico >= 400) lcd.print("Izquierda "); else if (analogico >= 250) lcd.print("Abajo "); else if (analogico >= 50) lcd.print("Arriba "); else if (analogico >= 0) lcd.print("Derecha "); }