#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define LED_BIRU 3
// Durasi beat lagu (72 BPM) ≈ 833 ms
int beat = 833;
// Frase lagu (isi sendiri)
String baris[] = {
"Kau_begitu_sempurna ",
"Dimataku_kau_begitu_indah ",
"Kau_membuat_diriku ",
"Akan_slalu_memujamu ",
" Disetiap_langkahku ",
" Kukan_slalu_memikirkan_dirimu ",
"Tak_bisa_kubayangkan ",
"Hidupku_tanpa_cintamu ",
" by.VIGOR W.S "
};
// Durasi tiap frase (perkiraan beat)
int durasiFrasa[] = {
beat * 2,
beat * 3,
beat * 2,
beat * 3,
beat * 2,
beat * 2,
beat * 3,
beat * 4,
beat * 4
};
int jumlah = sizeof(baris) / sizeof(baris[0]);
void setup() {
lcd.init();
lcd.backlight();
pinMode(LED_BIRU, OUTPUT);
}
// Efek scroll + LED mengikuti tempo
void tampilScroll(String text, int durasi) {
String s = " " + text;
int langkah = s.length();
int stepDelay = durasi / langkah;
for (int i = 0; i < langkah; i++) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(s.substring(i));
// ★ Hapus baris ke-2 setiap scroll (fix semua bait)
lcd.setCursor(0, 1);
lcd.print(" ");
// LED tetap sinkron tempo
digitalWrite(LED_BIRU, HIGH);
delay(stepDelay / 2);
digitalWrite(LED_BIRU, LOW);
delay(stepDelay / 2);
}
}
void loop() {
for (int i = 0; i < jumlah; i++) {
// ================================
// KHUSUS TIAP BAIT PENYESUAIAN TEMPO
// ================================
// Dimataku_kau_begitu_indah (index 1) — kamu bilang terlalu lambat → dipercepat
if (i == 1) {
delay((int)(beat * 0.6)); // semula ±0.8 beat
}
// Akan_slalu_memujamu (index 3) — tempo kurang cepat → dipercepat
if (i == 3) {
delay((int)(beat * 0.0)); // sebelumnya 1.3 beat → sekarang lebih cepat
}
// Disetiap_langkahku (index 4) — kamu bilang kurang cepat
if (i == 4) {
delay((int)(beat * 0.9)); // semula 1.0–1.2 beat
}
// Kukan_slalu_memikirkan_dirimu (index 5) — kurang cepat
if (i == 5) {
delay((int)(beat * 0.8)); // dipercepat
}
// Tak_bisa_kubayangkan (index 6) — terlalu cepat → dilambatkan sedikit
if (i == 6) {
delay((int)(beat * 0.8));
}
// ================================
// TAMPILKAN LIRIK + SCROLL
// ================================
tampilScroll(baris[i], durasiFrasa[i]);
}
}