Hacer funcionar una pantalla LCD con Arduino es mucho más fácil que con cualquier PIC, sólo se requiere hacer las conexiones necesarias, que ya vienen especificadas en los ejemplos de la librería en Arduino.
Para este tutorial vamos a utilizar un display LCD de 2 filas por 16 columnas.
Por lo general, la configuración de los pines de estas pantallas es como la siguiente:
- Pin 1: VSS o GND
- Pin 2: VDD (alimentación), trabaja con 5V
- Pin 3: Contraste, se conecta a un potenciómetro
- Pin 4: Selección de registro
- Pin 5: Lectura/escritura
- Pin 6: Enable (habilita o deshabilita la pantalla)
- Pin 7 al 14: Envío de información
- Pin 15: Ánodo del led de iluminación (+5V)
- Pin 16: Cátodo del led de iluminación (GND)
En este caso se utiliza una placa Arduino Mega, pero esta configuración funciona para cualquier otro tipo de Arduino. En resumen, los componentes a utilizar son:
- Placa Arduino
- Pantalla LCD de 2 X 16
- Potenciómetro de 10 K
- Cable o alambre estañado
- Protoboard
Ya que conectamos el LCD al Arduino, nos vamos al código, pero antes, si olvidaste cómo conectar el potenciómetro, el pin izquierdo se conecta a tierra, el derecho a 5V y el de en medio al pin 3 del LCD.
El código es el siguiente:
#include <LiquidCrystal.h> // Se inicializa la librería con los pines a utilizar LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // Se configura el LCD con el número de filas y columnas: lcd.begin(16, 2); // Se imprime un mensaje. lcd.print("masterhacks.net"); } void loop() { //Se configura el cursor en la columna 0, línea 1 // (Nota: la columna 0 es la 1 en realidad, porque se inicia contando desde cero): lcd.setCursor(0, 1); // Se imprime el número de segundos transcurridos desde el último reset: lcd.print(millis() / 1000); }
Puedes abrir el código directamente en Arduino, yendo a Archivo, Ejemplos, LiquidCrystal, HelloWorld.
El resultado es el siguiente:
Un pequeño cambio con el contador de los segundos sería utilizar un forma de reloj, con separador de horas y minutos, para esto modificamos la parte del contador de los segundos por lo siguiente:
void loop() { lcd.setCursor(6, 1); // Se inicia en la línea 1, posición 6 String r = reloj() ; lcd.print(r) ; } String reloj() { int n = millis() / 1000 ; // Se convierte a segundos int segundos = n % 60 ; int minutos = n / 60 ; String S = String(minutos) + ":" + String(segundos); return (S); }
Aquí hay que prestar atención a la última parte, ya que se hace una conversión de int a string, con el fin de convertir los números en texto para poder mezclarlos con los dos puntos (:) del reloj.
El resultado es el siguiente:
Efecto de texto en movimiento
Para dar un efecto de texto en movimiento, se puede utilizar el siguiente código:
#include <LiquidCrystal.h> #define COLS 16 // Columnas del LCD #define ROWS 2 // Filas del LCD #define VELOCIDAD 400 // Velocidad a la que se mueve el texto LiquidCrystal lcd(12, 11, 5, 4, 3, 2); String txt_fila = "masterhacks.net"; void setup() { Serial.begin(9600); lcd.begin(COLS, ROWS); } void loop() { // Tamaño del texto int txt=txt_fila.length(); // Mostrar el texto por la izquierda for(int i=txt; i>0 ; i--) { String texto = txt_fila.substring(i-1); // Se limpia la pantalla lcd.clear(); //Situamos el cursor lcd.setCursor(0, 0); // Escribimos el texto lcd.print(texto); // Esperamos delay(VELOCIDAD); } // Mostrar el texto por la derecha for(int i=1; i<=16;i++) { lcd.clear(); lcd.setCursor(i, 0); lcd.print(txt_fila); delay(VELOCIDAD); } // Desplazar el texto por la derecha for(int i=16;i>=1;i--) { lcd.clear(); lcd.setCursor(i, 1); lcd.print(txt_fila); delay(VELOCIDAD); } for(int i=1; i<=txt ; i++) { String texto = txt_fila.substring(i-1); lcd.clear(); lcd.setCursor(0, 1); lcd.print(texto); delay(VELOCIDAD); } }
Aquí básicamente se especifica la dirección de movimiento del texto que se va a mostrar en la pantalla, mostrando cada caracter a la velocidad declarada en la variable con el mismo nombre.
El resultado de este efecto se puede ver en el siguiente video: