En esta lección vas a aprender a escribr en un módulo LCD.
Las pantallas de cristal líquido
Un LCD (liquid crystal display) una pantalla delgada y plana formada por un número de píxeles en color o monocromos colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica. Gracias a ella se puede ofrecer al usuario información de lo que está sucediendo en el programa, lo cuál resulta muy útil y permite realizar proyectos más interactivos.
En esta lección vamos a usar un Modulo LCD I2C/SPI, con este modelo de LCD se necestian solo 2 señales para mostrar informacion (cuando se controla por I2C) o 3 señales en caso de controlarla por SPI. Esta LCD en concreto posee 20 columnas x 4 filas, por lo que se pueden escribir hasta 80 caracteres (con la biblioteca que usaremos solo se podrán escribir caracteres ASCII).
Preparando el proyecto
Para porgramar el módulo LCD necesitamos utilizar una biblioteca. ¿Qué es una biblioteca? Sencillamente una serie de funciones que alguien ha escrito por nosotros para simplificarnos el trabajo. Eso quiere decir, que en lugar de tener que escribir nosotros los valores en los pines tendremos funciones de alto nivel como lcd.print(“hola”) que harán todo el trabajo sucio por nosotros. La biblioteca que se utilizar para controlar las pantallas LCD se llama liquidCrystal. Sin embargo, esta librería de Arduino está pensada para LCDs que necesitan 6 señales para se controladas. Gracias al modulo IIC/SPI, la LCD de esta lección solo necesita 4, por lo que en bq hemos modificado la librería para que pueda funcionar correctamente.
Te enseñamos cómo se hace
Una vez que tenemos nuestro proyecto con esos 4 archivos vamos a conectar el LCD y a programarlo.
Conectando el módulo LCD
El módulo LCD dispone de 4 pines para conectar (en modo IIC). Estos pines son:
- SCL: Señal de reloj
- SDA: Señal del LCD
- VCC, tensión de alimentación
- GND o masa
La conexión de este componente debe ser siempre la misma (para que sea compatible con la biblioteca bqLiquidCrystal, si usas otra biblioteca no tiene por qué ser así).
NOMBRE | NÚMERO DEL PIN | COLOR DEL PIN |
SCL | A5 | Azul |
SDA | A4 | Azul |
VCC | A5 | Rojo |
GND | A5 | Negro |
Hola LCD
Ya tenemos la biblioteca necesaria y todo está conectado. Vamos a hacer el ¡Hola Mundo! mostrando por pantalla el texto Curso de Arduino. Aquí tienes el código
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include "BitbloqLiquidCrystal.h" /*** Global variables ***/ bool firstTime=true; LiquidCrystal lcd(0); //creamos un objeto LCD void setup() { lcd.begin(16, 2); //inicializamos el LCD, 16 columnas, 2 filas lcd.clear(); //borramos cualquier contenido residual } void loop() { //ejecutamos esto solo la primera vez if(firstTime){ lcd.clear(); //limpiamos cualquier contenido residual lcd.setCursor(0,0); //ponemos el cursos en la columna 0, fila 0 lcd.print("Curso de Arduino"); //imprimos este texto firstTime=false; //para que no se vuelva a hacer } } |
Vamos parte por parte
Declarando objeto LiquidCrystal
1 2 3 4 5 6 |
#include "BitbloqLiquidCrystal.h" /*** Global variables ***/ bool firstTime=true; LiquidCrystal lcd(0); //creamos un objeto LCD |
El tipo de variable LiquidCristal será el que nos permitirá manejar el módulo LCD. Por ello declaramos una variable global de este tipo, que en este caso hemos llamado lcd. Además la inicializamos con valor 0. A partir de ahora, todas las operaciones sobre el LCD serán del tipo lcd.xxx.
Inicializando el LCD
1 2 3 4 5 |
void setup() { lcd.begin(16, 2); //inicializamos el LCD, 16 columnas, 2 filas lcd.clear(); //borramos cualquier contenido residual } |
Como siempre, todas las inicializaciones las hacemos en la función setup(). Inicializamos el lcd, indicando el número de filas y columnas. El LCD que estamos usando nosotros es de 4 x 20, y por lo tanto indicamos esos valores. Posteriormente limpiamos cualquier “residuo” que podría quedar en la pantalla.
Escribimos
1 2 3 4 5 6 7 8 9 10 11 |
void loop() { //ejecutamos esto solo la primera vez if(firstTime){ lcd.clear(); //limpiamos cualquier contenido residual lcd.setCursor(0,0); //ponemos el cursos en la columna 0, fila 0 lcd.print("Curso de Arduino"); //imprimos este texto firstTime=false; //para que no se vuelva a hacer } } |
Igual que hemos hecho anteriormente utilizamos el recurso de una variable global para realizar una acción una sola vez, una vez hecho esto nos ponemos a escribir.
- lcd.clear(). Limpiamos todo lo que haya en la pantalla, no sería necesario ya que lo hicimos en el setup()
- lcd.setCursor(0,0). Indicamos en qué columna y fila deseamos escribir, en este caso en la fila 0 y columna 0, es decir, esquina superior izquierda.
- lcd.print(“Curso de Arduino”). Finalmente escribimos el texto que deseamos a imprimir.
Si compilamos y subimos este programa a la placa tendremos el siguiente resultado.
Moviendo texto por la pantalla
¿y si ahora quisiéramos que el texto “bq” apareciese recorriendo toda la pantalla? te dejamos aquí el código para que lo pruebes, lo analices, y si quieres, lo modifiques para hacer cosas distintas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include "BitbloqLiquidCrystal.h" /*** Global variables ***/ LiquidCrystal lcd(0); //creamos un objeto LCD void setup() { lcd.begin(16, 2); //inicializamos el LCD, 16 columnas, 2 filas lcd.clear(); //borramos cualquier contenido residual } void loop() { //bucle para iterar por las filas for(byte fila=0; fila < 2; fila++) { //bucle para iterar por las columnas for (byte columna=0; columna < 16 ; columna++) { lcd.clear(); lcd.setCursor(columna,fila); lcd.print("bq"); delay(200); } } } |