Arduino LCD Shield


Seguimos con la publicación de artículos sobre nuestro gran amigo Arduino, y esta vez toca hacer algo mas visual. Usaremos la Shield LCD con teclado. Esta shield es muy sencilla de usar, y la IDE de Arduino incorpora su librería con algunos ejemplos. Esta pantalla LCD nos será muy útil para mostrar información, y veremos que su uso es igual de sencillo que usar el puerto serie de nuestro Arduino.

Materiales necesarios

  • 1 Arduino. (Comprar Arduino UNO)
  • 1 Arduino LCD Shield. (Te dejo aquí un link para comprar Arduino LCD Shield muy barato).

Primeros pasos con Arduino LCD Shield

01
Vamos a emplear este modelo de Shield LCD con teclado, 2×16 (2 filas por 16 caracteres cada fila. 5×8 pixeles cada carácter).

Aunque este modelo posee un teclado, en este artículo solo nos centraremos en el uso básico de la pantalla LCD.

lcd shield arduino 02
Conectaremos la shield a nuestro Arduino. Nosotros usaremos Arduino Mega, pero para Arduino Uno funciona de la misma forma.

lcd shield arduino 03
Debemos asegurarnos de que los pines de la shield corresponden con los pines de Arduino.

Hola mundo! con Arduino LCD Shield

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
}

void loop() {

}

Empezaremos por la configuración y función básica de la librería LiquidCrystal que usa esta arduino lcd shield.

 lcd shield arduino 04

Es algo muy sencillo, donde los comentarios del propio código describen su funcionamiento. El único cuidado a tener, es a la hora de inicial la librería LiquidCrystal, en algunas shields los pines no son los que se usan en este código. Debemos comprobar que pin de Arduino corresponde a cada pin de la shield LiquidCrystal(rs, enable, d4, d5, d6, d7).

Posicionar el cursor

lcd.setCursor(col, row) establece la posición del cursor donde aparecerán los siguientes caracteres escritos en el LCD.

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.setCursor(0, 1); // Posicionamos el cursor en la columna 0 (físicamente la primera), y fila 1 (fisicamente la segunda)
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
}

void loop() {

}

lcd shield arduino 05

Mostrar la posición del cursor

lcd.cursor() muestra la posición actual del cursor con un subrayado en la pantalla.

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
lcd.cursor(); // Muestra el cursor.
}

void loop() {

}

lcd shield arduino 06

Mostrar la posición del cursor segunda opción

lcd.blink() muestra el cursor mediante una cuadro de forma parpadeante. Para ocultar la posición del cursor se debe usar la función lcd.noBlink().

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
lcd.blink(); // Muestra el cursor parpadeando.
}

void loop() {

}

lcd shield arduino 07

Reiniciar la posición del cursor

lcd.home() posiciona el cursor en la esquina superior izquierda del LCD.

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
lcd.cursor(); // Muestra el cursor.
delay(2000); // Esperamos dos segundos.
lcd.home(); // Situamos el cursor en la posición de inicio.
lcd.cursor(); // Muestra el cursor.
}

void loop() {

}

lcd shield arduino 08

Borrar contenido

lcd.clear() borra la pantalla del display LCD y posiciona el cursor en la esquina superior izquierda. El contenido borrado no podrá mostrarse otra vez con ninguna función.

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
delay(2000); // Esperamos dos segundos.
lcd.clear(); // Borramos todo el contenido del LCD.
}

void loop() {

}

lcd shield arduino 09

Encender el display

lcd.display() enciende el display LCD después de que haya sido apagado con lcd.noDisplay(). Esta función restaura el contenido del LCD (y el cursor) que estaba anteriormente en el display.

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.noDisplay(); // No mostraremos ningún carácter en el LCD.
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
delay(2000); // Esperamos dos segundos.
lcd.display(); // Mostramos los caracteres del LCD.
}

void loop() {

}

lcd shield arduino 10

En este programa se puede apreciar que hemos hecho una escritura y no se muestra hasta que no encendemos el display.

Desplazamiento de caracteres

lcd.scrollDisplayLeft() y lcd.scrollDisplayRight() desplaza el contenido del display LCD (texto y cursor) una posición a la izquierda o hacia la derecha.

En este ejemplo aumentaremos el nivel de complejidad para mostrar en el display un texto que rebota de lado a lado de la pantalla, útil para dar animación a los mensajes.

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

String txtMsg = "Hola mundo!"; // String para almacenar el mensaje. 
int StringLength = txtMsg.length(); // Tamaño del mensaje.

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD. 
lcd.print(txtMsg); // Imprimimos el mensaje. 
delay(500);
}

void loop() {
  for (int i=0; i<(16-StringLength); i++){ // Repetimos tantas veces como espacios libres:
  lcd.scrollDisplayRight(); // Desplazamos el testo un espacio hacia la derecha.
  delay(500); // Esperamos medio segundo.
  }
  
  for (int i=0; i<(16-StringLength); i++){ // Repetimos tantas veces como espacios libres:
  lcd.scrollDisplayLeft(); // Desplazamos el testo un espacio hacia la izquierda.
  delay(500); // Esperamos medio segundo.
  }
}

lcd shield arduino 11

Retroiluminación

Esta shield LCD posee una retroiluminación de color blanco. Mediante el Pin 10 PWM de nuestro Arduino podremos controlar la intensidad de esta iluminación. Los valores propios de esta salida van desde 0 (iluminación apagada) hasta 255 (iluminación máxima). La utilización de este control de retroiluminación es muy sencillo como veremos en el siguiente ejemplo:

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).
int analogPin = 10; // Pin de salida para la retroiluminación

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
lcd.print("Hola mundo!"); // Imprimimos el mensaje.
pinMode(analogPin, OUTPUT); // Establecemos el pin analogPin como salida.
analogWrite(analogPin, 5); // Esablecemos en nivel de la retroiluminación (0-255)
}

void loop() {

}

lcd shield arduino 17

Creación de caracteres personalizados para Arduino LCD Shield

lcd.createChar(num, data) crea un carácter de 5×8 pixeles. Solo se permiten 9 caracteres personalizados y etiquetados de 1 a 9 (num).

La apariencia de cada carácter personalizado se especifica mediante una serie de ocho bytes, uno para cada fila. Los cinco bits menos significativos de cada byte determinan los píxeles en esa fila (data).

Para mostrar el carácter personalizado se usa la función lcd.write().

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).

byte heart[8] = { // Corazón.
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

void setup() {
lcd.createChar(1, heart); // Creamos el carácter corazón.
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
 
lcd.setCursor(6,0);
lcd.print("I "); 
lcd.write(1); // Mostramos el carácter personalizado numerado con 1 (Debe usarse write()).
lcd.setCursor(0,1);
lcd.print("TuElectronica.es!");
}

void loop() {
 
}

lcd shield arduino 12

Una forma sencilla de crear nuestro carácter es dibujar una matriz de 5×8 y rellenaremos cada espacio para crear nuestro carácter. Para convertir este dibujo en un vector de 8 bytes, nos fijaremos en cada fila de la matriz dibujada, donde cada espacio en blanco será un 0 y un espacio coloreado será un 1:

lcd shield arduino 15
Matriz 5×8.

lcd shield arduino 16
Matriz coloreada.

byte smile[8] = { // Sonrrisa. 0b00000, 0b00000, 0b01010, 0b00000, 0b10001, 0b01110, 0b00000, 0b00000 };

Para finalizar este artículo, con los conocimientos obtenidos anteriormente, vamos a realizar un monitor serie con nuestra pantalla LCD, de tal forma que todos los caracteres que reciba Arduino por el puerto serie se muestren en el display.

#include <LiquidCrystal.h> // Incluimos la librería

// Iniciamos la librería con los pines necesarios.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7).
int i = 0; // Contador de caracteres.
int row = 0; // Contador de filas.

void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y de filas del LCD.
Serial.begin(9600); // Configuramos la velocidad del puerto serie.
}

void loop(){
  if (Serial.available()) { // Si tenemos datos en el puerto serie:
  delay(100); // Esperamos 100ms.
  lcd.clear(); // Limpiamos el contenido de la pantalla LCD.
  i = 0; // Reseteamos contador.
  row = 0; // Reseteamos contador.
  lcd.home();
    while (Serial.available() > 0) { // Repetimos hasta leer todos los caracteres del puerto serie:
      if(i==16){ // Si se leen 16 caracteres:
      lcd.setCursor(0,row++); // Saltamos a la siguiente fila del LCD. (Solo será visible un salto de fila, max 32 caracteres).
      i = 0; // Reseteamos contador.
      }
    lcd.write(Serial.read()); // Escribimos el carácter recibido por el puerto serie.
    i++; // Incrementamos contador.
    }
  }
}

lcd shield arduino 14

Para ver el funcionamiento de este programa, abriremos el monitor serie con la velocidad en 9600 baud y escribimos cualquier cosa.

lcd shield arduino 13
Debe aparecer lo que hemos enviado por puerto serie en la pantalla LCD.

Descargar Sketch


Deja un comentario