#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BUZZER_PIN 8
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Nada lagu disederhanakan
int melody[] = {
330, 330, 392, 440, 392, 330, 294, 330, 0, // "Kau begitu sempurna"
330, 330, 392, 440, 392, 330, 294, 330, 0, // "Dimataku kau begitu indah"
330, 330, 392, 440, 392, 330, 294, 330, 0 // "Kau membuat diriku slalu memujamu"
};
int noteDurations[] = {
4, 4, 4, 4, 4, 4, 4, 2, 4,
4, 4, 4, 4, 4, 4, 4, 2, 4,
4, 4, 4, 4, 4, 4, 4, 2, 4
};
// Lirik dibagi per 2 baris
String lyrics[] = {
"Kau begitu",
"sempurna",
"Dimataku kau",
"begitu indah",
"Kau buat diriku",
"slalu memujamu"
};
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lagu: Sempurna");
delay(2000);
lcd.clear();
}
void loop() {
int totalNotes = sizeof(melody) / sizeof(melody[0]);
int lyricIndex = 0;
for (int i = 0; i < totalNotes; i++) {
// Ganti lirik tiap 9 nada (2 baris sekaligus)
if (i % 9 == 0 && lyricIndex < (sizeof(lyrics)/sizeof(lyrics[0]) - 1)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(lyrics[lyricIndex]);
lcd.setCursor(0, 1);
lcd.print(lyrics[lyricIndex + 1]);
lyricIndex += 2;
}
int duration = 700 / noteDurations[i]; // LEBIH LAMBAT
if (melody[i] != 0) {
tone(BUZZER_PIN, melody[i], duration);
}
delay(duration * 1.4); // sedikit jeda lebih panjang
noTone(BUZZER_PIN);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selesai");
delay(3000);
}