/*☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄
☄ ☄
☄ ☘ DATOS GENERALES: ☄
☄ NOMBRE: Uso básico pantalla LCD con módulo I2C. ☄
☄ FECHA: 16 de febrero de 2024. ☄
☄ VERSIÓN: 1.0. ☄
☄ ☄
☄ AUTOR: M. en C. Esli Castellanos Berján. ☄
☄ E-MAIL: [email protected]. ☄
☄ COMPAÑÍA: Universidad de Colima - Facultad de Telemática. ☄
☄ ☄
☄ uC: ESP32-D0WD Dual Core. ☄
☄ Nombre: ESP32-S. ☄
☄ ☄
☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄
☄ ☄
☄ ☘ DESCRIPCIÓN DEL PROGRAMA: ☄
☄ Arquitectura de software para configurar y mostrar mostrar información☄
☄ en la pantalla LCD 16x2 con módulo I2C. ☄
☄ Voltaje de operación pantalla LCD I2C: 5V ☄
☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄
☄ ☄
☄ ☘ NOTAS: ☄
☄ ESP32 requiere instalar el driver para el USB Bridge. ☄
☄ Cuando no sube automáticamente el código hay que dejar presionado ☄
☄ el botón "boot" cuando aparezca la barra de "conecting..". ☄
☄ ☄
☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄*/
/*~ TIPS:~*/
/*~ Página para crear iconos personalizados ~*/
/*~ https://maxpromer.github.io/LCD-Character-Creator/ ~*/
/*~ Distribución física de los sedmentos de la pantalla ~*/
/*~ Filas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Columnas: ~*/
/*~ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ 1 ~*/
/*~ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ 2 ~*/
/*~ Cantidad de pixeles por segmento 5 X 8 = 40 ~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ ⬛⬛⬛⬛⬛~*/
/*~ Distribución lógica de los sedmentos de la pantalla ~*/
/*~ Filas: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Columnas: ~*/
/*~ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ 0 ~*/
/*~ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ ⬛ 1 ~*/
#include <Wire.h> /*~ Librería I2C ~*/
#include <LiquidCrystal_I2C.h> /*~ Librería LCD ~*/
/*~ Los siguientes arrays contienen un caracter, es decir se indica que pixel se enciendo o apaga dependiendo si es 1 o 0 ~*/
/*~ Icono o caracter 1 ~*/
byte caracter1 [ ] = {
B01110, /*~ ⬜⬛⬛⬛⬜~*/
B01010, /*~ ⬜⬛⬜⬛⬜~*/
B01110, /*~ ⬜⬛⬛⬛⬜~*/
B11111, /*~ ⬛⬛⬛⬛⬛~*/
B00100, /*~ ⬜⬜⬛⬜⬜~*/
B00100, /*~ ⬜⬜⬛⬜⬜~*/
B01010, /*~ ⬜⬛⬛⬛⬜~*/
B10001 /*~ ⬛⬜⬜⬜⬛~*/
};
/*~ Icono o caracter 2 ~*/
byte caracter2 [ ] = {
B11111, /*~ ⬛⬛⬛⬛⬛~*/
B10001, /*~ ⬛⬜⬜⬜⬛~*/
B10001, /*~ ⬛⬜⬜⬜⬛~*/
B11111, /*~ ⬛⬛⬛⬛⬛~*/
B11111, /*~ ⬛⬛⬛⬛⬛~*/
B11111, /*~ ⬛⬛⬛⬛⬛~*/
B11111, /*~ ⬛⬛⬛⬛⬛~*/
B11011 /*~ ⬛⬛⬜⬛⬛~*/
};
LiquidCrystal_I2C lcd ( 0x27, 16, 2 ); /*~ Instancia de la clase para el manejo de la pantalla ( Dirección I2C, cantidad de columnas, cantidad de filas ) ~*/
void setup ( void ) {
lcd.init ( ); /*~ Inicializar la pantalla LCD ~*/
lcd.createChar ( 0, caracter1 ); /*~ Indicar al programa que genere un caracter a partir del array de bits. ~*/
lcd.createChar ( 1, caracter2 ); /*~ Indicar al programa que genere otro un caracter. ~*/
}
void loop ( void ) {
lcd.backlight ( ); /*~ Encender la luz de fondo. ~*/
delay ( 1000 ); /*~ Esperar 1 segundo. ~*/
lcd.noBacklight ( ); /*~ Apagar la luz de fondo. ~*/
delay ( 1000 ); /*~ Esperar 1 segundo. ~*/
lcd.backlight ( ); /*~ Encender la luz de fondo. ~*/
lcd.setCursor ( 0, 0 ); /*~ ( columnas, filas) Ubicamos el cursor en la primera posición(columna:0) de la primera línea(fila:0) ~*/
lcd.write ( 0 ); /*~ Mostramos nuestro primer icono o caracter ~*/
delay ( 1000 ); /*~ Esperar 1 segundo ~*/
lcd.clear ( ); /*~ Limpiar pantalla ~*/
lcd.setCursor ( 0, 1 ); /*~ ( columnas, filas) Ubicamos el cursor en la primera posición(columna:0) de la segunda línea(fila:1) ~*/
lcd.write ( 1 ); /*~ Mostramos nuestro segundo icono o caracter ~*/
delay ( 1000 ); /*~ Esperar 1 segundo ~*/
lcd.clear ( ); /*~ Limpiar pantalla ~*/
lcd.setCursor ( 0, 0 ); /*~ ( columnas, filas) Ubicamos el cursor en la primera posición(columna:0) de la primera línea(fila:0) ~*/
lcd.print ( "Bienvenido" ); /*~ Mostrar una cadena de texto (no exceder 16 caracteres por línea)~*/
delay ( 1000 ); /*~ Esperar 1 segundo ~*/
for ( uint8_t i = 0; i < ( 40 ); i++ ) { /*~ Este ciclo es para que se vea como se recorren los caracteres, si no es colocado se vería muy rápido ~*/
lcd.scrollDisplayRight ( ); /*~ Recorrer caracteres de derecha a izquierda ~*/
delay ( 100 ); /*~ Esperar 100 milisegundos ~*/
}
for ( uint8_t i = 0; i < ( 40 ); i++ ) { /*~ Este ciclo es para que se vea como se recorren los caracteres, si no es colocado se vería muy rápido ~*/
lcd.scrollDisplayLeft ( ); /*~ Recorrer caracteres de izquierda a derecha ~*/
delay ( 100 ); /*~ Esperar 100 milisegundos ~*/
}
lcd.clear ( ); /*~ Limpiar pantalla ~*/
}
El brillo de la pantalla puede modularse
con el potenciómetro de la parte trasera.