#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Lirik lagu + delay per karakter
const char* lirik[] = {
"Bertanyaa...",
"Mengapa kita",
"Masih disini",
"Tersenyumm...",
"Alasan masih bersama",
"Bukan",
"karena terlanjur lama",
"Tapi rasanyaa",
"Yang masih samaaaa...",
"Seperti sejak pertama",
"Jumpa",
"Dirimu di kala senja",
"Duduk berduaaa",
"Tanpa suaraaa..."
};
float delayKarakter[] = {
0.4, 0.3, 0.3, 0.4,
0.2, 0.2, 0.2, 0.3,
0.2, 0.2, 0.2, 0.2,
0.3, 0.3
};
float delayBaris[] = {
0.02, 0.2, 0.2, 0.7,
0.1, 0.1, 0.2, 0.2,
0.8, 0.1, 0.1, 0.2,
0.2, 0.2
};
const int jumlahLirik = sizeof(lirik) / sizeof(lirik[0]);
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
delay(1000); // jeda awal
}
void loop() {
for (int i = 0; i < jumlahLirik; i++) {
lcd.clear();
// Pilih baris (selang-seling 0 dan 1 karena 16x2)
int row = i % 2;
lcd.setCursor(0, row);
const char* baris = lirik[i];
// Print karakter per karakter
for (int j = 0; baris[j] != '\0'; j++) {
lcd.print(baris[j]);
delay(delayKarakter[i] * 1000); // konversi detik -> ms
}
// Delay antarbaris
delay(delayBaris[i] * 1000);
// Setelah isi 2 baris atau akhir lirik, clear LCD
if (row == 1 || i == jumlahLirik - 1) {
delay(500);
lcd.clear();
}
}
delay(3000); // jeda sebelum ulangi
}