Arduino: LCD
En los proyectos de Arduino, es muy habitual querer mostrar algún dato. Podemos usar el apagado y encendido de una LED para indicar cuándo detectamos un objeto próximo a nuestro sensor infrarrojo; varias LED para mostrar números en binario...
Si disponemos de una pantalla LCD, es mucho más vistoso y cómodo visualizar los datos a través de ella.
Lo primero que haremos será preparar las conexiones. He aquí un esquema realizado con Fritzing de cómo debemos conectarlo todo:
A continuación podemos ver el listado de pines:
En el caso del caracter personalizado, he colocado los distintos bytes en distintas líneas para que podamos adivinar el dibujo. Cada caracter tiene 5 casillas de ancho por 8 de alto. El 1 lo utilizamos para iluminar la celda correspondiente y el 0 para dejarla apagada. La "ó" nos ha quedado de la siguiente forma:
Una vez cargado el código en nuestra Arduino, podremos ver al fin nuestra LCD funcionando:
PIN
|
Nombre
|
Descripción
|
1
|
VSS
|
GND
|
2
|
VDD
|
+5V
|
3
|
V0
|
Contrast Adjustment
|
4
|
RS
|
H/L Register Select signal
|
5
|
RW
|
H/L Read Write signal
|
6
|
E
|
H/L Enable signal
|
7
|
D0
|
H/L Databus line
|
8
|
D1
|
H/L Databus line
|
9
|
D2
|
H/L Databus line
|
10
|
D3
|
H/L Databus line
|
11
|
D4
|
H/L Databus line
|
12
|
D5
|
H/L Databus line
|
13
|
D6
|
H/L Databus line
|
14
|
D7
|
H/L Databus line
|
15
|
A
|
LED Power supply (Anode)
|
16
|
K
|
LED Power supply (GND)
|
En nuestro esquema no los usamos todos. Los pines quedarían así:
- VSS: conectado a masa (GND de la Arduino).
- VDD: directamente a +5V de la Arduino.
- V0: aquí controlamos el contraste de los caracteres. Iría de los 5V hacia el pin 3 pasando a través de una resistencia que es la que establece el contraste. Si lo ponemos mal, puede ser que solamente veamos cuadrados grandes en lugar de las letras o directamente que no se vea nada. En mi caso, he utilizado 2 resistencias de 1kΩ y una de 330Ω. Si tenéis algún problema con esto, lo ideal es utilizar un potenciómetro e ir variando la resistencia hasta tener el contraste adecuado. Una vez lo consigamos, podemos medir con ayuda de un voltímetro la resistencia que hemos utilizado (ojo, si medimos una resistencia y hay tensión en el circuito podemos dañar el voltímetro).
- RS: conectado al pin 12 de la Arduino.
- RW: conectado a masa (GND de la Arduino).
- E: conectado al pin 11 de la Arduino.
- D4: conectado al pin 5 de la Arduino.
- D5: conectado al pin 4 de la Arduino.
- D6: conectado al pin 3 de la Arduino.
- D7: conectado al pin 2 de la Arduino.
- A: esta es la alimentación de la LCD. Yo le he colocado una resistencia de 330Ω entre los 5V y este pin para no tener el brillo al máximo. Al igual que en el V0, siempre podéis utilizar un potenciómetro para regular el brillo.
- K: conectado a masa (GND de la Arduino).
/******************* * Probando la LCD * *******************/ #include <LiquidCrystal.h> // para controlar la LCD // Inicializamos la librería con los pines que hemos conectado: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Crea un objeto LiquidCrystal y asigna los pines void setup() { lcd.begin(16, 2); // Configuramos el display con 16 columnas y 2 filas } void loop() { muestraTexto(); mueveTextoDerecha(5); mueveTextoIzquierda(5); } /*** Esta función muestra el texto "Cozorello Tecnolóxico" en dos filas ***/ void muestraTexto() { lcd.clear(); // borra la pantalla lcd.setCursor(1, 0); // Se sitúa el cursor en el caracter 1, fila 0 (la primera) lcd.print("Cozorello"); // Muestra un texto lcd.setCursor(0, 1); // Se sitúa el cursor en el caracter 0, fila 1 (la segunda) lcd.print("Tecnol"); // como la o de tecnolóxico lleva tilde, creo un nuevo caracter: oConTilde(6,1); // muestro la ó lcd.setCursor(7,1); // coloco el cursor a continuación de "Tecnoló" lcd.print("xico"); // termino la frase } /*** Esta función crea un caracter "ó" y lo muestra en la posición indicada ***/ void oConTilde(int x, int y) { byte letraO[8] = { // crea un array de tipo byte B00010, B00100, B01110, B10001, B10001, B10001, B01110, B00000 }; lcd.createChar(1, letraO); // caracter personalizado 2, pueden crearse 8 como mucho lcd.setCursor(x,y); // coloco el cursor en las coordenadas especificadas lcd.write(1); // muestro el caracter creado } /*** Esta función desplaza el texto x veces a la derecha ***/ void mueveTextoDerecha(int x) { if(x > 0) { // por si nos hemos equivocado... for(int i = 0; i < x; i++) { lcd.scrollDisplayRight(); // desplazamos una vez toda la pantalla a la derecha delay(400); // pausa de 400ms } } } /*** Esta función desplaza el texto x veces a la izquierda ***/ void mueveTextoIzquierda(int x) { if(x > 0) { // por si nos hemos equivocado... for(int i = 0; i < x; i++) { lcd.scrollDisplayLeft(); // desplazamos una vez toda la pantalla a la izquierda delay(400); // pausa de 400ms } } }En el código podemos ver cómo mostrar texto según las distintas filas de la LCD y la posición del caracter especificado, cómo desplazar a izquierda o derecha toda la pantalla e incluso cómo crear un caracter personalizado.
En el caso del caracter personalizado, he colocado los distintos bytes en distintas líneas para que podamos adivinar el dibujo. Cada caracter tiene 5 casillas de ancho por 8 de alto. El 1 lo utilizamos para iluminar la celda correspondiente y el 0 para dejarla apagada. La "ó" nos ha quedado de la siguiente forma:
Una vez cargado el código en nuestra Arduino, podremos ver al fin nuestra LCD funcionando:
Comentarios
Publicar un comentario
En entradas antiguas, los comentarios quedarán pendientes de moderación. Si tu comentario tarda en aparecer, ten paciencia ;D