#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD I2C (alamat biasanya 0x27 atau 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin untuk buzzer dan tombol
const int buzzerPin = 8;
const int buttonPin = 7; // Pin untuk tombol
// Frekuensi nada untuk lagu "Selamat Ulang Tahun"
const int selamatUlangTahunNotes[] = {
262, 262, 294, 262, 349, 330, // Selamat ulang tahun
262, 262, 294, 262, 392, 349, // Selamat ulang tahun
262, 262, 523, 440, 349, 330, 294, // Selamat ulang tahun
466, 466, 440, 349, 392, 349 // Selamat ulang tahun
};
// Durasi setiap nada (dalam milidetik)
const int noteDurations[] = {
250, 250, 600, 500, 600, 1000, // Selamat ulang tahun
250, 250, 600, 500, 600, 1000, // Selamat ulang tahun
250, 250, 600, 600, 500, 500, 800, // Selamat ulang tahun
250, 250, 600, 500, 600, 1000 // Selamat ulang tahun
};
// Lirik untuk ditampilkan pada LCD
const char* lirik[] = {
" Selamat Ulang", " Tahun!", // Baris 1
" tahun, ......", // Baris 1
};
void setup() {
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Inisialisasi pin tombol sebagai input
pinMode(buttonPin, INPUT_PULLUP); // Gunakan internal pull-up resistor
// Tampilkan pesan awal
lcd.setCursor(0, 0);
lcd.print(" Tekan tombol");
lcd.setCursor(0, 1);
lcd.print(" untuk memulai");
}
void loop() {
// Cek apakah tombol ditekan (LOW berarti tombol ditekan)
if (digitalRead(buttonPin) == LOW) {
// Tampilkan pesan memulai lagu
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Sedang Memulai");
lcd.setCursor(0, 1);
lcd.print(" lagu");
delay(2000); // Tunggu 2 detik sebelum memulai
// Mainkan lagu sambil menampilkan lirik
for (int i = 0; i < 25; i++) { // 24 nada dalam lagu
// Tampilkan lirik setiap 6 nada
if (i == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(lirik[0]);
lcd.setCursor(0, 1);
lcd.print(lirik[1]);
} else if (i == 12) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(lirik[0]);
lcd.setCursor(0, 1);
lcd.print(lirik[2]);
} else if (i == 19) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(lirik[0]);
lcd.setCursor(0, 1);
lcd.print(lirik[1]);
}
// Mainkan nada
int noteDuration = noteDurations[i];
tone(buzzerPin, selamatUlangTahunNotes[i]); // Mainkan nada
delay(noteDuration); // Tunggu durasi nada
noTone(buzzerPin); // Hentikan nada
delay(90); // Jeda antar nada
}
// Tampilkan pesan selesai
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Lagu selesai!");
delay(2000); // Tampilkan pesan selesai selama 2 detik
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Tekan tombol");
lcd.setCursor(0, 1);
lcd.print(" untuk memulai");
}
}