#include <LiquidCrystal_I2C.h>
#include <pitches.h> // Library untuk konstanta nada musik
// Inisialisasi objek untuk LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C untuk modul LCD 16x2
// Pin buzzer terhubung ke pin 8 Arduino
const int buzzerPin = 8;
// Array untuk menyimpan nada dan durasi lagu Happy Birthday
int melody[] = {
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_C5, NOTE_B4,
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5,
NOTE_G4, NOTE_G4, NOTE_G5, NOTE_E5, NOTE_C5, NOTE_B4, NOTE_A4,
NOTE_F5, NOTE_F5, NOTE_E5, NOTE_C5, NOTE_D5, NOTE_C5
};
// Array untuk menyimpan durasi setiap nada
int noteDurations[] = {
4, 4, 8, 8, 8, 4,
4, 4, 8, 8, 8, 4,
4, 4, 8, 8, 8, 8, 8,
4, 4, 8, 8, 8, 4
};
// Variabel untuk mengatur waktu terakhir lagu dimainkan
unsigned long lastNoteTime = 0;
int currentNote = 0; // Menyimpan index nada yang sedang dimainkan
void setup() {
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.clear();
// Set kecepatan scroll teks
lcd.autoscroll();
// Tampilkan teks awal
lcd.print("happy birthdaay to youu!!");
}
void loop() {
// Pindahkan teks ke kiri secara berulang
lcd.scrollDisplayLeft();
delay(500); // Ubah nilai delay sesuai dengan kecepatan yang Anda inginkan
// Mainkan lagu Happy Birthday jika sudah waktunya
if (millis() - lastNoteTime > noteDurations[currentNote] * 100) {
playMelodyNote();
lastNoteTime = millis();
currentNote++;
if (currentNote >= sizeof(melody) / sizeof(melody[0])) {
currentNote = 0; // Ulangi lagu dari awal jika sudah mencapai nada terakhir
}
}
}
void playMelodyNote() {
int noteDuration = 1000 / noteDurations[currentNote];
tone(buzzerPin, melody[currentNote], noteDuration);
}