#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ajusta la dirección I2C si es necesario
//mano
byte mano1[8] = {
0b00000,
0b00000,
0b00010,
0b00110,
0b01111,
0b11111,
0b01110,
0b00000,
};
byte mano2[8] = {
0b00000,
0b00000,
0b00000,
0b00000,
0b11011,
0b00000,
0b00000,
0b00000,
};
byte mano3[8] = {
0b00000,
0b00000,
0b01000,
0b01100,
0b11110,
0b11111,
0b01110,
0b00000,
};
//flor
byte tallo[8] = {
B00100,
B01100,
B11010,
B10110,
B01100,
B00100,
B00000,
B00000
};
byte flor[8] = {
B00000,
B00000,
B10001,
B11011,
B11111,
B11111,
B01110,
B00100
};
//corazon
byte corazon[8] = {
B00000,
B01010,
B11111,
B11111,
B11111,
B01110,
B00100,
B00000
};
//logo
byte Logo1[8] = {
0b00000,
0b00000,
0b00000,
0b00011,
0b00100,
0b01000,
0b01000,
0b10000,
};
byte Logo2[8] = {
0b00001,
0b00011,
0b11111,
0b00111,
0b01101,
0b01101,
0b11101,
0b11001,
};
byte Logo3[8] = {
0b10000,
0b10000,
0b10000,
0b11000,
0b10100,
0b10010,
0b10010,
0b10001,
};
byte Logo4[8] = {
0b10001,
0b10001,
0b10011,
0b01011,
0b01111,
0b00110,
0b01111,
0b01100,
};
byte Logo5[8] = {
0b11000,
0b11111,
0b11111,
0b00001,
0b00001,
0b00000,
0b10001,
0b11111,
};
byte Logo6[8] = {
0b10001,
0b00001,
0b10001,
0b00010,
0b10110,
0b01100,
0b11000,
0b00000,
};
// Dibujo de la casa
byte Casa1[8] = {
0b00000,
0b00000,
0b00001,
0b00010,
0b00100,
0b01000,
0b11111,
0b01000
};
byte Casa2[8] = {
0b00000,
0b11111,
0b01000,
0b00100,
0b10010,
0b00001,
0b11111,
0b00010
};
byte Casa3[8] = {
0b00000,
0b11111,
0b00000,
0b00011,
0b00011,
0b00000,
0b11111,
0b00000
};
byte Casa4[8] = {
0b00000,
0b10000,
0b01000,
0b00100,
0b00010,
0b00001,
0b11111,
0b00010
};
byte Casa5[8] = {
0b01000,
0b01000,
0b01001,
0b01001,
0b01001,
0b01001,
0b01111,
0b00000
};
byte Casa6[8] = {
0b00010,
0b00010,
0b10010,
0b10010,
0b10010,
0b10010,
0b11111,
0b00000
};
byte Casa7[8] = {
0b11000,
0b11000,
0b00000,
0b00000,
0b00000,
0b00000,
0b11111,
0b00000
};
byte Casa8[8] = {
0b11010,
0b11010,
0b00010,
0b00010,
0b00010,
0b00010,
0b11110,
0b00000
};
// Dibujo del perro
byte P[8] = {
0b00000,
0b00000,
0b00001,
0b00010,
0b00100,
0b01000,
0b10001,
0b00000,
};
byte E[8] = {
0b01111,
0b10000,
0b00100,
0b00100,
0b00100,
0b00100,
0b00100,
0b10100,
};
byte R[8] = {
0b11000,
0b00110,
0b00001,
0b00110,
0b00110,
0b00000,
0b00000,
0b00000,
};
byte O[8] = {
0b00000,
0b00000,
0b00000,
0b11111,
0b00011,
0b00001,
0b00001,
0b00010,
};
byte U[8] = {
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
};
byte S[8] = {
0b01100,
0b00000,
0b00000,
0b00001,
0b00010,
0b00100,
0b01000,
0b10000,
};
byte X[8] = {
0b00000,
0b00111,
0b11000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
};
byte T[8] = {
0b00100,
0b11000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
};
// Dibujo del caballo
int x = -3;
byte chr[2][8][8] = {
{
{0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x0E},
{0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x1F, 0x1F},
{0x00, 0x00, 0x00, 0x03, 0x07, 0x1F, 0x1F, 0x1F},
{0x00, 0x00, 0x05, 0x1F, 0x1D, 0x1F, 0x16, 0x06},
{0x0C, 0x18, 0x10, 0x00, 0x01, 0x01, 0x01, 0x00},
{0x1F, 0x1F, 0x1E, 0x17, 0x00, 0x00, 0x10, 0x00},
{0x1F, 0x1F, 0x03, 0x02, 0x14, 0x04, 0x02, 0x00},
{0x1C, 0x1C, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00}
},
{
{0x00, 0x00, 0x00, 0x07, 0x0F, 0x0E, 0x1C, 0x18},
{0x00, 0x00, 0x00, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F},
{0x00, 0x00, 0x01, 0x03, 0x1F, 0x1F, 0x1F, 0x1F},
{0x14, 0x1C, 0x1A, 0x1E, 0x1F, 0x13, 0x10, 0x10},
{0x13, 0x13, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00},
{0x1F, 0x07, 0x0E, 0x06, 0x01, 0x00, 0x00, 0x00},
{0x0F, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00},
{0x10, 0x18, 0x0C, 0x02, 0x02, 0x11, 0x00, 0x00}
}
};
void setup() {
Wire.begin();
lcd.init();
lcd.backlight();
// Mensaje de aniversario
cargarMano();
lcd.setCursor(2, 0);
lcd.print("Samitaaaaaaa");
lcd.setCursor(6, 1);
lcd.write(byte(0));
lcd.write(byte(1));
lcd.write(byte(2));
delay(4000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hoy cumplimos 5");
lcd.setCursor(0, 1);
lcd.print("meses juntos");
delay(4000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Un ramo de");
lcd.setCursor(0, 1);
lcd.print("flores para ti");
delay(2000);
lcd.clear();
cargarFlor();
for (int i = 0; i < 16; i++) {
lcd.setCursor(i, 0); // Primera fila (flores)
lcd.write(byte(0)); // Flor
lcd.setCursor(i, 1); // Segunda fila (tallos)
lcd.write(byte(1)); // Tallo
}
delay(4000);
// Mostrar la casa
lcd.clear();
cargarCasa(); // Carga los caracteres de la casa
lcd.setCursor(0, 0);
lcd.print("Nuestra");
lcd.setCursor(0, 1);
lcd.print("casita");
lcd.setCursor(10, 0);
lcd.write(byte(0)); // Casa
lcd.write(byte(1));
lcd.write(byte(2));
lcd.write(byte(3));
lcd.setCursor(10, 1);
lcd.write(byte(4));
lcd.write(byte(5));
lcd.write(byte(6));
lcd.write(byte(7));
delay(4000);
// Mostrar el perro
lcd.clear();
cargarPerro(); // Carga los caracteres del perro
lcd.setCursor(7, 0);
lcd.print("Nuestro");
lcd.setCursor(7, 1);
lcd.print("perrito");
lcd.setCursor(0, 0);
lcd.write(byte(0)); // Perro
lcd.write(byte(1));
lcd.write(byte(2));
lcd.write(byte(3));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.write(byte(5));
lcd.write(byte(6));
lcd.write(byte(7));
delay(4000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Eres mi Avenger");
lcd.setCursor(0, 1);
lcd.print("favorita ;)");
delay(4000);
lcd.clear();
cargarLogo();
for (int i = 0; i < 4; i++) { // Iterar 4 veces para las columnas
int col = i * 4; // Calcular la posición de la columna (0, 4, 8, 12)
// Escribir los bytes en la primera fila
lcd.setCursor(col, 0);
lcd.write(byte(0));
lcd.write(byte(1));
lcd.write(byte(2));
// Escribir los bytes en la segunda fila
lcd.setCursor(col, 1);
lcd.write(byte(3));
lcd.write(byte(4));
lcd.write(byte(5));
}
delay(4000);
lcd.clear();
cargarCorazon();
lcd.setCursor(0, 0);
lcd.print("Felices 5 meses");
lcd.setCursor(0, 1);
lcd.print("Te amo mucho ");
lcd.write(byte(0)); // Corazón
lcd.write(byte(0));
lcd.write(byte(0));
delay(6000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Miraaa");
lcd.setCursor(0, 1);
lcd.print("un caballo :O ");
delay(4000);
}
void cargarLogo() {
// Cargar los caracteres de la casa (0-7)
lcd.createChar(0, Logo1);
lcd.createChar(1, Logo2);
lcd.createChar(2, Logo3);
lcd.createChar(3, Logo4);
lcd.createChar(4, Logo5);
lcd.createChar(5, Logo6);
}
void cargarMano() {
// Cargar los caracteres de la casa (0-7)
lcd.createChar(0, mano1);
lcd.createChar(1, mano2);
lcd.createChar(2, mano3);
}
void cargarCorazon() {
// Cargar los caracteres de la casa (0-7)
lcd.createChar(0, corazon);
}
void cargarFlor() {
// Cargar los caracteres de la casa (0-7)
lcd.createChar(0, flor);
lcd.createChar(1, tallo);
}
void cargarCasa() {
// Cargar los caracteres de la casa (0-7)
lcd.createChar(0, Casa1);
lcd.createChar(1, Casa2);
lcd.createChar(2, Casa3);
lcd.createChar(3, Casa4);
lcd.createChar(4, Casa5);
lcd.createChar(5, Casa6);
lcd.createChar(6, Casa7);
lcd.createChar(7, Casa8);
}
void cargarPerro() {
// Cargar los caracteres del perro (0-7)
lcd.createChar(0, P);
lcd.createChar(1, E);
lcd.createChar(2, R);
lcd.createChar(3, O);
lcd.createChar(4, U);
lcd.createChar(5, S);
lcd.createChar(6, X);
lcd.createChar(7, T);
}
void loop() {
// Mostrar el caballo en movimiento
int totalTime = 9664; // Tiempo total en milisegundos (7.2 segundos)
unsigned long startTime = millis(); // Tiempo de inicio
while (millis() - startTime < totalTime) { // Ejecutar solo por 7.2 segundos
for (int f = 0; f < 2; f++) {
lcd.clear();
for (int i = 0; i < 8; i++) {
lcd.createChar(i, chr[f][i]);
}
for (int c = 0; c < 4; c++) {
int xc = x + c;
if ((xc >= 0) && (xc < 16)) {
lcd.setCursor(xc, 0); lcd.write(byte(c));
lcd.setCursor(xc, 1); lcd.write(byte(c + 4));
}
}
x++; // Incrementa x para mover el caballo
if (x > 15) { // Reinicia x para que el caballo vuelva a aparecer
x = -4;
}
delay(400); // Retardo por cada movimiento
}
}
// Finaliza el bucle con un while(true)
while (true) {
// Queda en bucle infinito aquí
}
}