Type something to search...
Personalizar caracteres en LCD

Personalizar caracteres en LCD

Índice

  1. Explicación del Código
  2. Componentes Clave del Código
  3. Desafíos
  4. Recursos
  5. Ejemplo extra para animar al Dino

Explicación del Código

Este código utiliza una pantalla LCD con interfaz I2C para mostrar caracteres personalizados, incluyendo un corazón, una carita feliz y una representación del dinosaurio del juego de Google. Además, organiza los caracteres personalizados en diferentes posiciones de la pantalla.


Componentes Clave del Código

1. Librería LiquidCrystal_I2C

La librería LiquidCrystal_I2C.h se utiliza para controlar la pantalla LCD mediante una interfaz I2C, reduciendo el número de cables necesarios.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

2. Inicialización del LCD

Se inicializa el LCD con la dirección I2C 0x20 (puede variar dependiendo del módulo LCD) y se define un LCD de 16 columnas y 2 filas.

LiquidCrystal_I2C lcd(0x20, 16, 2);

3. Caracteres Personalizados

Los caracteres personalizados se crean utilizando arrays de 8 bytes, donde cada byte representa una fila de la matriz de 5x8 de la pantalla LCD.

Ejemplo: Corazón

byte customChar[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

Cada 1 en los bytes enciende un píxel en la matriz, formando la figura deseada.

Dinosaurio del Juego de Google

El dinosaurio se divide en varias partes (superior izquierda, superior derecha, etc.), cada una almacenada en un array personalizado.

byte customChar2[8] = { 0B00000, 0B00000, 0B00010, 0B00010, 0B00011, 0B00011, 0B00011, 0B00011 };

4. Cargar Caracteres Personalizados

Se utilizan índices de 0 a 7 para cargar un máximo de 8 caracteres personalizados en la memoria del LCD.

lcd.createChar(0, customChar);  // Corazón
lcd.createChar(1, customChar1); // Carita feliz
lcd.createChar(2, customChar2); // Parte superior izquierda del Dino

5. Impresión de Texto y Caracteres

Se usan las funciones:

  • lcd.setCursor(columna, fila) para posicionar el cursor en la pantalla.
  • lcd.print("texto") para imprimir texto.
  • lcd.write(byte(índice)) para imprimir un carácter personalizado.

Ejemplo

lcd.setCursor(0, 0); // Primera fila
lcd.print("Dino");

Esto imprime el texto “Dino” en la primera fila.


Desafíos

Desafío 1: Cambiar el Diseño del Corazón

  • Instrucción: Cambia el diseño del corazón para que sea más grande o tenga una forma diferente.
  • Pista: Modifica los bytes dentro del array customChar.

Ejemplo:

byte customChar[8] = {
  0b00000,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000,
  0b00000
};

Desafío 2: Mover la Posición del Dinosaurio

  • Instrucción: Cambia las posiciones en las que se imprimen las partes del dinosaurio para que aparezca en el centro de la pantalla.
  • Pista: Modifica las líneas con lcd.setCursor en la sección setup.

Ejemplo:

lcd.setCursor(6, 0); // Cambia a la columna 6 en la primera fila
lcd.write(byte(2));  // Parte superior izquierda

Recursos:

Puedes usar el siguiente enlace para personalizar tus propios caracteres: Chareditor.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inicializa la pantalla con la dirección I2C (generalmente 0x20 o 0x27 o 0x3F)
LiquidCrystal_I2C lcd(0x20, 16, 2);

// Define un carácter personalizado (por ejemplo, un corazón)
byte customChar[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

// Otro carácter personalizado (por ejemplo, una carita feliz)
byte customChar1[8] = {
  0B00000,
  0B00000,
  0B01010,
  0B00000,
  0B00000,
  0B10001,
  0B01110,
  0B00000
};

// Aqui encontraras los caracteres necesarios para crear al Dino de google
// Define los caracteres personalizados para el dino
byte customChar2[8] = { 0B00000, 0B00000, 0B00010, 0B00010, 0B00011, 0B00011, 0B00011, 0B00011 };
byte customChar3[8] = { 0B00000, 0B00000, 0B00000, 0B00000, 0B00000, 0B10000, 0B11001, 0B11111 };
byte customChar4[8] = { 0B00111, 0B01111, 0B01101, 0B01111, 0B01111, 0B11111, 0B11111, 0B11111 };
byte customChar5[8] = { 0B11100, 0B11110, 0B11110, 0B11110, 0B10000, 0B11110, 0B10000, 0B10000 };
byte customChar6[8] = { 0B00001, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 };
byte customChar7[8] = { 0B11111, 0B11111, 0B01111, 0B01111, 0B00010, 0B00010, 0B00011, 0B00011 };
byte customChar8[8] = { 0B11111, 0B11111, 0B00111, 0B00111, 0B00010, 0B00010, 0B00011, 0B00011 };
byte customChar9[8] = { 0B11000, 0B11100, 0B00100, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 };

void setup() {
  // Inicializa la pantalla LCD
  lcd.init();
  lcd.backlight();

  // Carga los caracteres personalizados
  lcd.createChar(0, customChar);  // Carga el corazón en la posición 0
  lcd.createChar(1, customChar1); // Carga la carita feliz en la posición 1
  // caracteres de dino
  lcd.createChar(2, customChar2);    // Parte superior izquierda dino
  lcd.createChar(3, customChar3);   // Parte superior centro1 dino
  lcd.createChar(4, customChar4); // Parte superior centro2 dino
  lcd.createChar(5, customChar5); // Parte superior derecha dino
  lcd.createChar(6, customChar6);    // Parte inferior izquierda dino
  lcd.createChar(7, customChar7);   // Parte inferior centro1 dino
  lcd.createChar(8, customChar8); // Parte inferior centro2 dino
  lcd.createChar(9, customChar9); // Parte inferior derecha dino
  

  // Imprime texto y caracteres personalizados
  lcd.setCursor(0, 0); // Establece el cursor en la primera fila
  lcd.print("Dino");
  
  // Muestra el dino en el LCD superior
  lcd.setCursor(11, 0); // Primera fila, 11va columna
  lcd.write(byte(2));  // Parte superior izquierda
  lcd.write(byte(3));  // Parte superior central
  lcd.write(byte(4));  // Parte superior derecha
  lcd.write(byte(5));  // Parte superior derecha
  
  lcd.setCursor(0, 1); // Establece el cursor en la segunda fila (para la ubicacion)
  //lcd.write(byte(0));  // Imprime el carácter personalizado en la posición 0
  lcd.print(" ");
  //lcd.write(byte(1));  // Imprime el carácter personalizado en la posición 1
  
  // Muestra el dino en el LCD inferior 
  lcd.setCursor(11, 1); // Segunda fila, primera columna
  lcd.write(byte(6));  // Parte inferior izquierda
  lcd.write(byte(7));  // Parte inferior derecha
  lcd.write(byte(8));  // Parte inferior derecha
  lcd.write(byte(9));  // Parte inferior derecha
}

void loop() {
  // Puedes agregar otras acciones en el bucle principal
}

Ejemplo extra para animar al Dino


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inicializa la pantalla con la dirección I2C (generalmente 0x20 o 0x27 o 0x3F)
LiquidCrystal_I2C lcd(0x20, 16, 2);

// Define un carácter personalizado (por ejemplo, un corazón)
byte customChar[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

// Otro carácter personalizado (por ejemplo, una carita feliz)
byte customChar1[8] = {
  0B00000,
  0B00000,
  0B01010,
  0B00000,
  0B00000,
  0B10001,
  0B01110,
  0B00000
};

// Aquí están los caracteres necesarios para crear al Dino de Google
byte customChar2[8] = { 0B00000, 0B00000, 0B00010, 0B00010, 0B00011, 0B00011, 0B00011, 0B00011 };
byte customChar3[8] = { 0B00000, 0B00000, 0B00000, 0B00000, 0B00000, 0B10000, 0B11001, 0B11111 };
byte customChar4[8] = { 0B00111, 0B01111, 0B01101, 0B01111, 0B01111, 0B11111, 0B11111, 0B11111 };
byte customChar5[8] = { 0B11100, 0B11110, 0B11110, 0B11110, 0B10000, 0B11110, 0B10000, 0B10000 };
byte customChar6[8] = { 0B00001, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 };
byte customChar7[8] = { 0B11111, 0B11111, 0B01111, 0B01111, 0B00010, 0B00010, 0B00011, 0B00011 };
byte customChar8[8] = { 0B11111, 0B11111, 0B00111, 0B00111, 0B00010, 0B00010, 0B00011, 0B00011 };
byte customChar9[8] = { 0B11000, 0B11100, 0B00100, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 };

void setup() {
  // Inicializa la pantalla LCD
  lcd.init();
  lcd.backlight();

  // Carga los caracteres personalizados
  
  lcd.createChar(2, customChar2); // Parte superior izquierda dino
  lcd.createChar(3, customChar3); // Parte superior centro1 dino
  lcd.createChar(4, customChar4); // Parte superior centro2 dino
  lcd.createChar(5, customChar5); // Parte superior derecha dino
  lcd.createChar(6, customChar6); // Parte inferior izquierda dino
  lcd.createChar(7, customChar7); // Parte inferior centro1 dino
  lcd.createChar(8, customChar8); // Parte inferior izquierda dino
  lcd.createChar(9, customChar9); // Parte inferior centro1 dino
}

void displayDino(int col) {
  // Borra las filas para evitar artefactos
  lcd.setCursor(0, 0);
  lcd.print("                "); // Borra la primera fila
  lcd.setCursor(0, 1);
  lcd.print("                "); // Borra la segunda fila

  // Dibuja el dinosaurio en la nueva posición
  lcd.setCursor(col, 0); // Posición para la parte superior del Dino
  lcd.write(byte(2));
  lcd.write(byte(3));
  lcd.write(byte(4));
  lcd.write(byte(5));

  lcd.setCursor(col, 1); // Posición para la parte inferior del Dino
  lcd.write(byte(6));
  lcd.write(byte(7));
  lcd.write(byte(8));
  lcd.write(byte(9));
}

void loop() {
  for (int col = 12; col >= 0; col--) { // Mover de derecha a izquierda
    displayDino(col);
    delay(100); // Retraso para animación
  }
    for (int col = 0; col <= 12; col++) { // Mover de izquierda a derecha
    displayDino(col);
    delay(100); // Retraso para animación
    }
  
}

Publicaciones relacionadas

Encender y apagar led usando processing

Encender y apagar led usando processing

Encender y Apagar Luz LED Usando Processing Índice¿Qué es Processing? Temas importantes del proyecto Especificación detallada de las conexiones Especificaciones del proyecto Preg

read more
Multímetro

Multímetro

Introducción En esta clase, aprenderás sobre componentes electrónicos básicos como resistencias, potenciómetros y el uso de un multímetro para medir voltajes. También exploraremos cómo estos concep

read more
Semáforo sencillo

Semáforo sencillo

// C++ code //// Pines de los LEDs del semáforo sencillo const int LED_VERDE = 2; const int LED_AMARILLO = 3; const int LED_ROJO = 4;void setup() { // Configuración de los pines OUTPUT

read more
Web climatológica con hora

Web climatológica con hora

ÍndiceÍndice ¿Qué es una página web? Ejemplos de páginas web: [¿Cómo se construye una página web?](#cómo-se-construye-u

read more
Reloj digital LCD

Reloj digital LCD

Reloj digital LCD Introducción En este tutorial, vamos a crear un reloj digital utilizando un display LCD y un microcontrolador

read more
Semáforos Coordinados

Semáforos Coordinados

Semáforos coordinados Introducción En este proyecto, vamos a crear un sistema de semáforos coordinados utilizando Arduino.

read more
Markdown Style Guide

Markdown Style Guide

Here is a sample of some basic Markdown syntax that can be used when writing Markdown content in Astro. Headings The following HTML <h1>—<h6> elements represent six levels of section headings

read more
Pantallas LCD

Pantallas LCD

Introducción a las Pantallas LCD Las pantallas LCD (Liquid Crystal Display) son dispositivos electrónicos utilizados para mostrar información de manera clara y eficiente. Estas pantallas son muy co

read more
Semáforo Doble

Semáforo Doble

Descripción del código Este programa controla el funcionamiento de dos semáforos simulados utilizando un Arduino. Cada semáforo cuenta con tres luces LED: verde, amarillo y rojo. El programa altern

read more
Galería Web

Galería Web

Introducción Este proyecto está diseñado para comprender las bases del desarrollo web, comenzando con HTML y CSS básicos y progresando a JavaScript interactivo. Se divide en **cuatro etapas evoluti

read more
Controlador L298N DC Motor para Arduino

Controlador L298N DC Motor para Arduino

Introduccion Si bien eventualmente necesitarás aprender a controlar motores de CC para construir tu propio robot, probablemente necesitarás algo un poco más fácil para comenzar, y ahí es donde entr

read more
Componentes HTML

Componentes HTML

import YouTubeEmbed from '../../layouts/components/YouTubeEmbed.astro'; Componentes HTML y Estilos CSS En este blog explicativo se muestran los componentes principales de HTML y estilos CSS para

read more
Portafolio web

Portafolio web

Proyecto: Página Personal o Portafolio Web Objetivo Crear una página web personal en la que se muestre:Una cabecera con tu nombre y un menú de navegación. Una sección "Sobre Mí" co

read more
Juego de adivinar el número

Juego de adivinar el número

Proyecto: Juego de Adivinar el Número Objetivo Crear un juego interactivo en el que el usuario debe adivinar un número aleatorio entre 1 y 100. El juego brindará retroalimentación indicando si

read more
Introducción a Javascript

Introducción a Javascript

Test Código<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Introducción a JavaScript</title> <style> /* E

read more
Examen Práctico: Mi Página Personal

Examen Práctico: Mi Página Personal

Examen Práctico: Objetivo Crear una página web personal con diseño moderno en la que se muestre:Una cabecera fija con tu nombre y un menú de navegación interactivo. **Una sección "Sob

read more
Proyectos

Proyectos

Planificación de 12 Semanas para Proyectos Los proyectos serán libres y sencillos, pero deberán abordar un problema escolar o de la comunidad, utilizando al menos dos de las tecnologías vistas en c

read more
Hosting y Alojamiento web

Hosting y Alojamiento web

Hosting, Dominios, Almacenamiento y Bases de Datos 🌐 🎯 ObjetivosEntender qué es un dominio y un hosting Conocer el papel del almacenamiento web Descubrir para qué sirven l

read more
Evaluación Parcial

Evaluación Parcial

Evaluación del Avance del ProyectoObjetivo General de la Evaluación:Verificar que los equipos hayan cumplido con al menos el 70% del desarrollo funcional del proyecto, incluyendo inte

read more
Bases para la Elaboración del Reporte Breve del Proyecto

Bases para la Elaboración del Reporte Breve del Proyecto

📝 Bases para la Elaboración del Reporte Breve del ProyectoFormato: Documento Word (máximo 4 páginas)Entrega: En formato digital (PDF), cargar en el apartado de Archivos.

read more
Mascota virtual

Mascota virtual

🐾 Proyecto: Mascota Virtual en Escritorio con Python Este proyecto te guiará paso a paso para crear una mascota virtual que se mueva por tu pantalla de Windows y muestre mensajes motivadores c

read more
Mascota virtual

Mascota virtual

🐾 Proyecto: Mascota Virtual en Escritorio con Python Este proyecto te guiará paso a paso para crear una mascota virtual que se mueva por tu pantalla de Windows y muestre mensajes motivadores c

read more