#include <LiquidCrystal.h>
// Constantes
const int COLS = 16;
const int ROWS = 2;
const int VELOCIDAD = 250; // Reducido para animaciones más rápidas
const int CICLOS = 3;
// Pines del LCD
const int RS = 12, EN = 11, D4 = 5, D5 = 4, D6 = 3, D7 = 2;
// Inicialización del LCD
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
// Diseño simétrico para el LCD
const char* CUTE_PATTERN[ROWS] = {
"<^> UdG-V <^>",
"=o= (^_^) =o="
};
// Nuevos patrones para animación
const char* ANIMATE_EYES[] = {"(^_^)", "(-.-)", "(o_o)", "(O_O)"};
const char* ANIMATE_ARROWS[] = {"<^>", "<->", "<v>"};
void setup() {
Serial.begin(9600);
lcd.begin(COLS, ROWS);
}
void loop() {
mostrarPatron();
delay(1000);
animarPatron();
animarOjos();
animarFlechas();
delay(1000);
}
void mostrarTexto(const char* linea1, const char* linea2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(linea1);
lcd.setCursor(0, 1);
lcd.print(linea2);
}
void mostrarPatron() {
mostrarTexto(CUTE_PATTERN[0], CUTE_PATTERN[1]);
}
void animarPatron() {
for (int i = 0; i < CICLOS; i++) {
mostrarTexto("<^> UdG-V <^>", "=o= (^_^) =o=");
delay(VELOCIDAD);
mostrarTexto("<v> UdG-V <v>", "=o= (o_o) =o=");
delay(VELOCIDAD);
}
}
void animarOjos() {
char linea1[17];
char linea2[17];
strcpy(linea1, CUTE_PATTERN[0]);
for (int i = 0; i < CICLOS * 2; i++) {
for (int j = 0; j < 4; j++) {
sprintf(linea2, "=o= %s =o=", ANIMATE_EYES[j]);
mostrarTexto(linea1, linea2);
delay(VELOCIDAD);
}
}
}
void animarFlechas() {
char linea1[17];
char linea2[17];
strcpy(linea2, CUTE_PATTERN[1]);
for (int i = 0; i < CICLOS * 2; i++) {
for (int j = 0; j < 3; j++) {
sprintf(linea1, "%s UdG-V %s", ANIMATE_ARROWS[j], ANIMATE_ARROWS[j]);
mostrarTexto(linea1, linea2);
delay(VELOCIDAD);
}
}
}