# LCD

##### <span style="color: rgb(22, 145, 121);">**La pantalla LCD**</span>

Las pantallas Liquid Cristal Display es la forma más sencilla de poner una interfaz de texto a nuestro Arduino.

<iframe allowfullscreen="allowfullscreen" class="giphy-embed" frameborder="0" height="59" id="bkmrk--1" src="https://giphy.com/embed/7RrSGWsK3BKRG" style="width: 101px; height: 59px;" width="101"></iframe>

[via GIPHY](https://giphy.com/gifs/lcd-7RrSGWsK3BKRG)

La pantalla LCD tiene un precio muy bajo, el más común es el Hitachi HD44780 monocromo con configuración 16 caracteres y 2 líneas (16x2) pero también se venden 20×02, 20×04 y 40×02.

Su conexión **DIRECTA** con el Arduino no es recomendable por la cantidad de cables que se necesitan y el código elaborado, pero tiene la ventaja de tener total libertad en creación de caracteres y control. Si quieres ver esta opción puedes ver [la página de Luis LLamas](https://www.luisllamas.es/arduino-lcd-hitachi-hd44780/)

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-wpoiygcd.jpeg)

#### <span style="color: rgb(22, 145, 121);">**Conexión I2C**</span>

Como hemos dicho en [La pantalla LCD](https://libros.catedu.es/3-lcd/3-lcd/31-la-pantalla.md) no es recomendable su conexión directa con Arduino, para ello está este controlador que permite su conexión **utilizando sólo dos cables**. Los dos componentes pueden salir por menos de 5€.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-genms9bc.png)

Su conexión con el LCD tiene que ser tal y como indica la imagen, y soldando los terminales con cuidado: ![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-9u05uixe.png)   
*CC-BY-SA [Luis Llamas](https://www.luisllamas.es/arduino-lcd-i2c/)*

<p class="callout info">*Mejor que el Display, **es el OLED,** tiene un consumo más bajo, mejor visibilidad en ambientes con luz, y ya estan listas para conectar con Arduino con el protocolo I2C  
Recomendamos esta página [https://www.luisllamas.es/conectar-arduino-a-una-pantalla-oled-de-0-96/](https://www.luisllamas.es/conectar-arduino-a-una-pantalla-oled-de-0-96/)*</p>

#### <span style="color: rgb(22, 145, 121);">**Conexión con el Arduino**</span>

La conexión tiene serie tiene que ser en los pines A4 y A5 exclusivamente en el Arduino Uno pues son los dedicados para el protocolo serie I2C que veremos más adelante. Para otras placas ve[r la página de Luis Llamas](https://www.luisllamas.es/arduino-lcd-i2c/).

El esquema es muy sencillo:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-7uvs5vli.png) ![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-t1h5dr7x.png) *CC-BY-SA [Luis Llamas](https://www.luisllamas.es/arduino-lcd-i2c/)*

#### <span style="color: rgb(22, 145, 121);">**Contraste**</span>

Tiene un potenciómetro azul para regular el contraste, bastante sensible por cierto (una poca variación hace que nuestro texto no se vea correctamente):

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-chxedokw.png)

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-jylopgrt.png)

#### <span style="color: rgb(22, 145, 121);">**Montaje 11 Escaneo**</span>

El bus I2C está vinculado en el Arduino Uno a los Pines A4 y A5 como hemos visto en [la anterior página](https://libros.catedu.es/3-entradas-y-salidas/31-lcd/312-i2c.md), el protocolo serie I2C necesita **la librería Wire.h (no ejecutar el editor online, no esta wire.h)** pero la **dirección de dispositivo no lo sabemos** PARA ELLO HAY QUE EJECUTAR ESTE CÓDIGO:

[https://create.arduino.cc/editor/javierquintana/0f2a1666-cec2-43ad-a978-e83c421316a5/preview](https://create.arduino.cc/editor/javierquintana/0f2a1666-cec2-43ad-a978-e83c421316a5/preview)<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/0f2a1666-cec2-43ad-a978-e83c421316a5/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

Extraído de [Arduino.cc](https://playground.arduino.cc/Main/I2cScanner) o también de [Luis Llamas](https://www.luisllamas.es/arduino-i2c/)

Nos tiene que salir lo siguiente:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-fayavrmd.gif)

En mi caso como ves la dirección me ha salido **0x3F** pero puede ser cualquier otro, por ejemplo otro valor muy típico es **0x27**

#### <span style="color: rgb(22, 145, 121);">**Librería LiquidCrystal**</span>

Sólo nos falta incorporar la librería LiquidCrystal\_I2C que te [lo puedes descargar aquí](https://codeload.github.com/marcoschwartz/LiquidCrystal_I2C/zip/master)

Una vez descargado, es un fichero comprimido .zip o .rar **no lo descomprimas** directamente desde el menú del entorno de programación lo incorporas de esta manera :

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-p3xn4cs0.gif)

#### <span style="color: rgb(22, 145, 121);">**Principales funciones**</span>

**LiquidCrystal\_I2C(lcd\_Addr, lcd\_cols, lcd\_rows)** Crea una variable (informáticamente un objeto de la clase LiquidCrystal\_I2C) para poder utilizar sus funciones, hay que indicar entre paréntesis la dirección, columnas y filas indicadas. Por ejemplo LiquidCrystal\_I2C lcd(0x3F,16,2);

<p class="callout info">*¿No sabes la dirección?. Eso es que te has saltado lo que hemos explicado anteriormente. E*n mi caso es 0x3F.</p>

Después de crear esa variable hay que inicializarlo con lcd.**init()**

<p class="callout warning">**lcd** es el nombre de la variable, puedes poner el nombre que quieras</p>

- lcd.**clear()** Borra la pantalla y posiciona el cursor en la esquina superior izquierda (0,0).
- lcd.**setCursor(columna, fila)** Posiciona el cursor del LCD en la posición indicada por columna y fila.
- lcd.**print("**texto**")** Escribe el texto
- lcd.**scrollDisplayLeft()** Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda.
- lcd.**scrollDisplayRight()** Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha.
- lcd.**backlight()** Enciende la Luz del Fondo del LCD
- lcd.**noBacklight();** Apaga la Luz del Fondo del LCD
- lcd.**createChar (num, datos)** Crea un carácter personalizado permite crear hasta 8. Para usar esta función [ver esta página.](https://www.arduino.cc/en/Reference/LiquidCrystalCreateChar)

## <span style="color: rgb(22, 145, 121);">**Montaje 12 Texto en LCD**</span>

Vamos a realizar un ejemplo para practicar:

- El encendido y apagado de la pantalla
- Visualización de texto
- Visualización de texto con desplazamiento

Practicaremos qué código tiene que estar en el código dentro de *setup* y qué código dentro de *bool*:

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/CBcGb9WWihY" width="560"></iframe>

El código es sencillo, la primera parte que sólo lo hace una vez, tiene que estar en setup y en loop sólo la parte de que se desplaza contínuamente.

**OJO CAMBIA TU DIRECCIÓN 0x3F si no es esa**

[https://create.arduino.cc/editor/javierquintana/8c633ec1-0e2a-4c5f-8fa0-a0a1bb31645c/preview](https://create.arduino.cc/editor/javierquintana/8c633ec1-0e2a-4c5f-8fa0-a0a1bb31645c/preview)<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/8c633ec1-0e2a-4c5f-8fa0-a0a1bb31645c/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>