domingo, 20 de septiembre de 2015

[Librerias Arduino 01] Libreria LiquidCrystal

Como lo prometido es deuda, ahora terminaré el tutorial de la pantalla LCD que puedes visitar haciendo click aquí, en este tutorial estudiaremos la librería LiquidCrystal y estudiaremos el lenguaje para controlar la pantalla. Ademas de ellos veremos los ejemplos con los que quede en deuda del tutorial anterior.

Objetivos
  • Aprender a conectar la pantalla LCD de acuerdo a la configuracion que le daremos a esta por medio del Sketch en Arduino IDE
  • Conocer las funciones de la pantalla LCD y controlarla en nivel experto
  • Practicar algunos ejemplos con la pantalla LCD
Librería LiquidCrystal
Esta librería permite controlar pantallas de cristal liquido (LCD) basadas en el chip HD44780 de Hitachi. Este chip se encuentra en la mayoría de LCDs de caracteres. La librería puede trabajar tanto en 4 bits como en 8 bits (4 u 8 lineas de datos)

Como usar la Librería LiquidCrystal
Funciones de inicialización de la pantalla
Aquí se muestran los pasos obligatorios para usarla son 2 pasos.
  • LiquidCrystal nombredelavariable(rs,rw,en,d0,d1,d2,d3,d4,d5,d6,d7);
    Se debe asignar un nombre a la variable que usaremos para llamar al lcd, yo le pondré "lcd" y también se deben asignar los números de los pines de arduino que asignaremos para conectar los pines de la pantalla LCD (rs,rw,en,...,d7)
  • LiquidCrystal nombredelavariable(rs,rw,en,d4,d5,d6,d7);
    Se puede escoger una configuración de 4 bit como se ve. también se puede quitar rw quedando como funcion LiquidCrystal lcd(12,11,10,9,8,7); donde rs=pin 12,en=pin 11, d4=pin 10, d5=pin 9, d6=pin 8 y d7=pin 7
  • El pin rw es opcional como se vio en el tutorial anterior.
En todo este tutorial le llamaremos a la variable "lcd"
  • lcd.begin(); Especifica dimensiones (columnas y filas) de la pantalla. Tiene dos parametros; el primero es la cantidad de columnas y el segundo es la cantidad de filas.
Funciones de la pantalla LCD
Funciones para escribir caracteres
  • lcd.write(); Escribe un carácter en la pantalla. Solo tiene un parámetro, el cual se especifica explicitamente entre comillas lcd.write("Hola mundo"); o puede ser una variable de tipo "byte" como en el ejemplo 2.
  • lcd.print(); Escribe un dato de cualquier tipo en pantalla. Como primer parámetro tiene el dato, se puede agregar un segundo parámetro de manera opcional, el cual indica el formato en que se vera el dato, como por ejemplo bin (binario), hex (hexadecimal), dec (decimal) en caso de que se desee mostrar en alguno de estos formatos.
  • lcd.createChar(); Crea un carácter totalmente personalizado. Se pueden crear och caracteres diferentes de 5x8 pixeles cada uno. La información se envía en un array de 8 bytes. cada uno de estos bytes representa una fila de pixeles. Esta función solo crea un carácter, no lo muestra en pantalla. Para mostrarlo en pantalla se debe utilizar lcd.write();. Los parámetros de esta función son dos, el primero el nombre del carácter (su identificación) y el segundo es el array donde se se indican los pixeles que son 1 o 0.
    Para poder crear un carácter de forma mas interactiva podemos utilizar el siguiente sitio web, donde de manera interactiva podremos crear nuestros propios caracteres.
Ejemplos de las funciones para escribir caracteres
Ejemplo 1
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);

void setup() { 
  lcd.begin(16, 2);
  lcd.write("Seba LABs");
}

void loop() { }

Ejemplo 2
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12); 

byte dibujo[8] = { B01110, 
                   B11011, 
                   B10001, 
                   B10001, 
                   B10001, 
                   B10001, 
                   B10001, 
                   B11111 }; 
  
void setup() {
          lcd.createChar(0, dibujo);
/*IMPORTANTE: hay poner lcd.createChar antes de lcd.begin, de no ser así no se muestra el caracter en pantalla.*/
          lcd.begin(16, 2);
          lcd.write(byte(0));
} 
  
void loop() {}

Ejemplo 3
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12); 

byte dibujo[8] = { B00000, 
                   B01010, 
                   B11111, 
                   B11111, 
                   B01110, 
                   B00100, 
                   B00000, 
                   B00000 }; 
  
void setup() {
          lcd.createChar(0, dibujo);
/*IMPORTANTE: hay que poner lcd.createChar antes de lcd.begin, de no ser asi no se muestra el caracter en pantalla.*/
          lcd.begin(16, 2);
          lcd.write("Nuevo char: ");
          lcd.write(byte(0));
} 
  
void loop() {}

Ejemplo 4
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12); 

byte corazon[8] = { B00000, 
                    B01010, 
                    B11111, 
                    B11111, 
                    B01110, 
                    B00100, 
                    B00000, 
                    B00000 }; 

byte bateria1[8] ={ B01110, 
                    B10001, 
                    B10001, 
                    B10001, 
                    B10001, 
                    B10001, 
                    B10001, 
                    B11111 };

byte bateria2[8] ={ B01110, 
                    B10001, 
                    B10001, 
                    B10001, 
                    B10001, 
                    B11111, 
                    B11111, 
                    B11111 };

byte bateria3[8] ={ B01110, 
                    B11111, 
                    B11111, 
                    B11111, 
                    B11111, 
                    B11111, 
                    B11111, 
                    B11111 };
                  
void setup() {
          lcd.createChar(0, corazon);
          lcd.createChar(1, bateria1);
          lcd.createChar(2, bateria2);
          lcd.createChar(3, bateria3);
          
          lcd.begin(16, 2);
          
          lcd.write(byte(0));
          lcd.write(byte(1));
          lcd.write(byte(2));
          lcd.write(byte(3));
} 
void loop() {}

Otras funciones
Estas funciones no tienen parámetro, ni valor de retorno a menos que se especifique lo contrario. Como es el caso de la función lcd.setCursor(); donde posee parámetros, pero no valor de retorno.
  • lcd.clear(); Con esta instrucción se borra la pantalla y posiciona el cursor en la esquina superior izquierda para escribir a partir de allí el próximo texto.
  • lcd.home(); Posiciona el cursor en la esquina superior izquierda de la pantalla para escribir desde allí (posición 0,0) el próximo texto. Si ademas se desea borrar la pantalla es mejor usar la función lcd.clear();
  • lcd.setCursor(); Posiciona el cursor en la columna y fila especificada para escribir a partir de allí el próximo texto.  Su primer parámetro es la columna y el segundo es la columna. Un ejemplo sería lcd.setCursor(3,0); posicionando el cursor en la 3ra columna y en la 1ra fila.
  • lcd.cursor(); Muestra el cursor en forma de linea ("_") en la posición donde el próximo carácter será escrito.
  • lcd.noCursor(); Oculta el cursor.
  • lcd.blink(); Hace parpadear el cursor (Es necesario que sea visible el cursor para hacerlo parpadear).
  • lcd.noBlink(); Evita que el parpadeo del cursor.
  • lcd.display(); Enciende la pantalla después de haberla apagado mediante lcd.noDisplay();
  • lcd.noDisplay(); Apaga la pantalla pero no pierde el texto actual, de modo que cuando se use lcd.display(); se encenderá la pantalla y se restaurará el texto (y el cursor) que se mostraba antes de apagarse.
  • lcd.scrollDisplayLeft(); Desplaza el contenido de la pantalla (texto y cursor) un espacio a la izquierda.
  • lcd.scrollDisplayRight(); Desplaza el contenido de la pantalla un espacio a la derecha
  • lcd.autoscroll(); Activa el desplazamiento automático del contenido mostrado en la pantalla.
  • lcd.noAutoscroll(); Desactiva el desplazamiento automático.
  • lcd.leftToRight(); Establece el sentido de la escritura del texto en la pantalla. Por defecto es izquierda a derecha (este mismo), es decir que los caracteres se irán mostrando de en este mismo sentido. 
  • lcd.rightToLeft(); Establece el sentido de la escritura de derecha a izquierda como hacen los árabes por ejemplo.
Ejemplos de las funciones
Ejemplo 5
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12);

void setup() {
          lcd.begin(16,2);
          lcd.print("Hola");
}
void loop() {
// Me sitúo en el primer carácter de la segunda fila
          lcd.setCursor(0,1);
// Escribo los segundos desde el inicio del sketch
          lcd.print(millis()/1000);
}

Ejemplo 6
En este ejemplo se muestra lo que se muestra en el monitor serial en tiempo real, suponiendo que la placa arduino esta conectado por medio del USB al computador. Para ello tenemos que escribir algo en el monitor serial como se muestra en las imágenes y lo iremos viendo en tiempo real.
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12);

void setup() {
          lcd.begin(16,2);
          Serial.begin(9600);
}

void loop() {
          if (Serial.available()>0) {
//Me espero un poco para que llegue el mensaje entero
          delay(100);
          lcd.clear();
//Leo todos los caracteres disponibles del buffer
          while (Serial.available() > 0) {
//Muestro cada carácter en el LCD
          lcd.write(Serial.read());
}
}
}

Ejemplo 7
En este ejemplo se muestra como en el LCD una secuencia de caracteres van posicionándose cada ve mas a la derecha, como si fuera una barra de progreso animada.
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12);
/*El código muestra en una posición tres caracteres personalizados,uno tras otro, y entonces paso a la siguiente posición y vuelvo arepetir la secuencia */
byte a[8] = {B00000,B00000,B00000,B00100,B00100,B00000,
B00000,B00000};
byte b[8] = {B00000,B00000,B10001,B10001,B10001,B10001,
B00000,B00000};
byte c[8] = {B11111,B10001,B10001,B10001,B10001,B10001,
B10001,B11111};

void setup() {
          lcd.createChar(0,a);
          lcd.createChar(1,b);
          lcd.createChar(2,c);
          lcd.begin(16,2);
          lcd.clear();
}
void loop() {
      int i;
      for (int i=0; i<16; i++){
          lcd.setCursor(i,0); lcd.write(byte(0)); delay(250);
          lcd.setCursor(i,0); lcd.write(byte(1)); delay(250);
          lcd.setCursor(i,0); lcd.write(byte(2)); delay(250);
          lcd.setCursor(i,0); lcd.write(byte(1)); delay(250);
          lcd.setCursor(i,0); lcd.write(byte(0)); delay(250);
      }
      delay(1000);
      lcd.clear();
}


Con esto queda por finalizado el trabajo con la pantalla LCD y puede realizar muchos proyectos con esta misma. Próximamente mostrare como conectar el sensor HC-SR04 (Sensor ultrasónico) a la pantalla LCD y con esto mostrar una aplicacion muy practica de la pantalla LCD.

No olvides visitar la pestaña tutoriales arduino, donde podrás encontrar la lista de tutoriales que he hecho hasta el momento. Como siempre muchas gracias por visitar mi blog y si tienen alguna consulta o consejo puede realizarlo por medio de este mismo blog.

1 comentario:

  1. como seria para una nota musica, es decir, que este una melodia sonando, pero al mismo tiempo que en el diaplay se vean sus notas musicales

    ResponderBorrar