#include <LiquidCrystal_I2C.h>
const int col = 16;
const int row = 2;
LiquidCrystal_I2C lcd(0x27, col, row);
// 👇 Pixel untuk emoticon hati (♥)
byte love[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};
void setup() {
lcd.init();
lcd.backlight();
// 👇 Inisialisasi simbol hati
lcd.createChar(0, love);
// Pesan awal
lcd.clear();
lcd.setCursor(3, 0); // "HALLOW KEII" di tengah atas
lcd.print("HALLO KEII");
lcd.setCursor(4, 1); // "from rev" di tengah bawah
lcd.print("from rev");
delay(3000); // Tahan selama 3 detik
}
void loop() {
// 1. Animasi "Keii ♥" bergerak naik-turun
animasiKeii();
// 2. Animasi "Semangat yaa" berkedip
animasiSemangat();
// 3. Tampilkan "Hasta la vista" dan "Adios"
tampilkanAkhir();
}
void animasiKeii() {
static int position = 0; // Posisi horizontal teks
static int direction = 0; // Arah vertikal (0 = atas, 1 = bawah)
for (int step = 0; step < col - 6; step++) { // Loop untuk animasi
lcd.clear();
lcd.setCursor(position, direction); // Posisi teks dinamis
lcd.write(0); // Simbol hati di sisi kiri
lcd.print(" Keii "); // Teks
lcd.write(0); // Simbol hati di sisi kanan
// Update posisi horizontal
position++;
// Jika posisi mencapai ujung, reset dan ubah arah vertikal
if (position > col - 7) { // 7 = panjang teks " Keii " + simbol hati (2)
position = 0; // Reset posisi horizontal
direction = 1 - direction; // Ganti arah vertikal
}
delay(200); // Jeda animasi
}
}
void animasiSemangat() {
for (int i = 0; i < 5; i++) { // Berkedip 5 kali
lcd.clear();
lcd.setCursor(2, 0); // Tampilkan di tengah atas
lcd.print("Semangat yaa");
delay(500);
lcd.clear();
delay(500);
}
}
void tampilkanAkhir() {
lcd.clear();
lcd.setCursor(2, 0); // "Hasta la vista" di tengah atas
lcd.print("Hasta la vista");
lcd.setCursor(6, 1); // "Adios" di tengah bawah
lcd.print("Adios");
delay(3000); // Tahan selama 3 detik
}