Cuando queramos interactuar con nuestro aparato  lo primero que interesa es poder ver datos y para ello nada mejor que un display LCD. (si no tienes ningún display siempre podrás usar el puerto serie que lleva el propio soft de Arduino).

Este es el esquema del archiconocido display Hitachi HD44780. aunque implícitamente no lo ponga casi todos se basan en él, así que es posible que tengas uno y el conexionado sea idéntico.

16x2 char lcd pinout 4 bit interface 16x2 char lcd pinout 4 bit interface less2 HD44780_pins

 

Pin description
PIN NUMBER SYMBOL FUNCTION
1 Vss GND
2 Vdd  + 3V or + 5V
3 Vo Contrast Adjustment
4  RS H/L Register Select Signal
5 R/W H/L Read/Write Signal
6 E  H → L Enable Signal
7  DB0 H/L Data Bus Line
8  DB1 H/L Data Bus Line
9  DB2 H/L Data Bus Line
10  DB3 H/L Data Bus Line
11  DB4 H/L Data Bus Line
12  DB5 H/L Data Bus Line
13  DB6 H/L Data Bus Line
14  DB7 H/L Data Bus Line
15 A/Vee + 3.5V for LED/Negative Voltage Output
16 K K Power Supply for B/L (OV)

Si vas a probar una que hayas reciclado de otro proyecto y quieras hacerla funcionar no olvides poner una resistencia variable de 10 kΩ  para el control del contraste:

 

Pero si no quieres grandes quebraderos de cabeza por menos de 4 Euros tienes una que se pincha directamente sobre Arduino y tiene hasta botones para hacer un “hipotético menú”: (Algunas unidades que venían últimamente de tiendas de China venían defectuosas, esperemos que lo subsanen pronto).

lcd keypad

SKU083549k

Para el código y los pines:

 

/*
Metemos un texto fijo y la columna de abajo seleccionamos con teclas
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int adc_key_val[5] = {50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
boolean luzEncendida=true;
boolean cursorActivo=false;
unsigned long time;
int x=0;
char caracterActual = ‘A’;
void setup()
{
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(“Hello World !!!”);
time = millis();
//  pinMode(10, OUTPUT);
}
void loop()
{
if (millis()-time > 10000) {  // Si han pasado mas de 10 segundos apagamos la luz
pinMode(10, OUTPUT);
digitalWrite(10, LOW);
luzEncendida=false;
}
if (millis()-time > 5000) {  // Si han pasado mas de 5 segundos apagamos el cursor
lcd.noBlink();
cursorActivo=false;
}
adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
key = get_key(adc_key_in);    // Obtenemos el boton pulsado
if (key != oldkey)   // if keypress is detected
{
delay(50);  // Espera para evitar los rebotes de las pulsaciones
adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
key = get_key(adc_key_in);    // Obtenemos el boton pulsado
if (key != oldkey)
{
time = millis();  // TODO: falta la comprobacion de si se ha desbordado el tiempo
if (!luzEncendida) {  // Al pulsar cualquier tecla encendemos la pantalla
pinMode(10, INPUT);
luzEncendida=true;
}
else {  // si la pantalla esta encendida seguimos funcionando normalmente
lcd.setCursor(x, 1);
oldkey = key;
if (key >=0){  // Si se ha pulsado cualquier tecla
lcd.blink();  // Mostramos el cursor parpadeando
cursorActivo=true;
}
if (key == 0){  // Se ha pulsado la tecla derecha
x++;
if (x>15) x=15;
caracterActual=’A’;
}
if (key == 1) {  // Se ha pulsado la tecla arriba
caracterActual++;
if (caracterActual > ‘Z’) caracterActual=’Z’;
lcd.write(caracterActual);
}
if (key == 2) {  // Se ha pulsado la tecla abajo
caracterActual–;
if (caracterActual < ‘A’) caracterActual=’A’;
lcd.write(caracterActual);
}
if (key == 3) {  // Se ha pulsado la tecla izquierda
x–;
if (x<0) x=0;
caracterActual=’A’;
}
if (key == 4){  // Se ha pulsado la tecla de seleccion
}
lcd.setCursor(x, 1);
}
}
}
delay(100);
}
// Convertimos el valor leido en analogico en un numero de boton pulsado
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)k = -1;  // Error en la lectura
return k;
}

 

Descárgate el fichero: http://www.securlab.es/files/HD44780_con_botones.ino

 

 

Recuerda:

 – Si cargas otro ejemplo lo importante es decirle en el programa  donde están las patillas:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
– Cambia si es necesario el número de líneas y longitud de caracteres de tu LCD:

lcd.begin(16, 2);          16 caracteres y dos líneas
lcd.begin(20, 4);          20 caracteres y 4 líneas
Esquema que uso yo con todos los LCD´s para que sean compatibles:
lcd_schem ARDUINO LCD nuevo patillaje

2 thoughts on “Módulos LCD: Hitachi HD44780

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *