#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int buzzer = 8; // Pin untuk buzzer
const int ledPins[] = {2, 3, 4, 5, 6, 7, 9}; // Pin untuk 7 LED
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi I2C LCD dengan alamat 0x27
// Melodi "Serumpun Padi" (dalam Hz)
int melody[] = {
392, 440, 466, 523, 0, 523, 440, 392, 349, 392, 0, 392, 440, 466, 523, 0,
523, 440, 392, 349, 0, 349, 392, 440, 466, 0, 466, 523, 440, 392, 349, 0,
349, 392, 440, 466, 0, 523, 466, 440, 392, 349, 0, 392, 440, 466, 523, 0,
523, 440, 392, 349, 0, 349, 392, 440, 466, 0, 466, 523, 440, 392, 349, 0
};
// Durasi nada untuk "Serumpun Padi" (dalam ms)
int noteDurations[] = {
570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570,
570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570,
570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570,
570, 570, 570, 570, 570, 570, 570, 570,
};
// Lirik "Serumpun Padi" untuk ditampilkan di LCD (setiap dua baris)
const char* lyrics[] = {
"Serumpun padi", "tumbuh di sawah",
"Hijau menguning", "daunnya",
"Tumbuh di sawah", "penuh berlumpur",
"Di pangkuan ibu", "pertiwi",
"Serumpun jiwa", "suci",
"Hidupnya nista", "abadi",
"Serumpun padi", "mengandung janji",
"Harapan ibu", "pertiwi"
};
void setup() {
pinMode(buzzer, OUTPUT);
for (int i = 0; i < 7; i++) {
pinMode(ledPins[i], OUTPUT); // Set pin LED sebagai output
}
lcd.init();
lcd.backlight();
lcd.clear();
// Menampilkan nama di baris kedua
lcd.setCursor(0, 1);
lcd.print("Mohammed Akmal Nugroho");
int lyricIndex = 0;
// Mulai memainkan melodi dan menampilkan lirik
for (int i = 0; i < sizeof(melody) / sizeof(int); i++) {
// Perbarui lirik setiap 8 nada
if (i % 8 == 0 && lyricIndex < sizeof(lyrics) / sizeof(lyrics[0])) {
lcd.clear();
lcd.setCursor(0, 0); // Posisikan ke baris pertama
lcd.print(lyrics[lyricIndex]); // Tampilkan baris pertama
lcd.setCursor(0, 1); // Posisikan ke baris kedua
lcd.print(lyrics[lyricIndex + 1]); // Tampilkan baris kedua
lyricIndex += 2;
}
// Mainkan nada
if (melody[i] != 0) { // Jika bukan jeda
tone(buzzer, melody[i], noteDurations[i] * 0.7);
}
// Menyalakan LED secara berurutan
digitalWrite(ledPins[i % 7], HIGH); // Hidupkan LED
delay(noteDurations[i] / 2); // Tunggu setengah durasi nada
digitalWrite(ledPins[i % 7], LOW); // Matikan LED
delay(noteDurations[i] / 2);
noTone(buzzer); // Matikan nada setelah setiap nada
}
}
void loop() {
// Biarkan loop kosong untuk mencegah pengulangan
}