#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LedControl.h>
// Inisialisasi objek LCD dengan alamat I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi objek LedControl dengan parameter pin DIN, CLK, CS
LedControl lc=LedControl(12,11,10,1);
byte letter_I[] = {
B01111110,
B01111110,
B00011000,
B00011000,
B00011000,
B00011000,
B01111110,
B01111110
};
byte heart[] = {
B01100110,
B11111111,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000,
B00000000
};
byte letter_U[] = {
B11100111,
B11100111,
B11100111,
B11100111,
B11100111,
B11111111,
B01111110,
B00111100
};
// Happy b'day tone
#define NOTE_C4 262 // Define the frequencies for each note
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784
#define NOTE_A5 880
#define NOTE_B5 988
#define NOTE_C6 1047
#define BUZZER_PIN 9 // Define the pin connected to the buzzer
int melody[] = { // Define the notes of the "Happy Birthday" song
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
};
int noteDurations[] = { // Define the duration of each note
4, 4, 8, 4, 4, 2,
4, 4, 8, 4, 4, 2,
4, 4, 4, 4, 4, 4, 2,
4, 4, 4, 4, 4, 4
};
void setup() {
// Buzzer
pinMode(BUZZER_PIN, OUTPUT); // Set the buzzer pin as an output
// Led Matrix
lc.shutdown(0,false); // Aktifkan modul
lc.setIntensity(0,15); // Atur kecerahan (0~15)
lc.clearDisplay(0); // Bersihkan layar
// Inisialisasi LCD
lcd.init();
lcd.backlight(); // Aktifkan backlight
displayHeart(); // led Matrix tampilkan hati
//Tampilan LCD kata Kesan
lcd.setCursor(0, 0);
lcd.print("Apakah kmu tahu?");
lcd.setCursor(0, 1);
lcd.print("kmu adlh prmpuan");
delay(5000); // delay 1
lcd.setCursor(0, 0);
lcd.print("yang saya kenal ");
lcd.setCursor(0, 1);
lcd.print("dan saya cintai ");
delay(5000); //delay 2
lcd.setCursor(0, 0);
lcd.print("secara tiba2... ");
lcd.setCursor(0, 1);
lcd.print("kamu orang yang ");
delay(5000); // delay 3
lcd.setCursor(0, 0);
lcd.print("sangat cantik...");
lcd.setCursor(0, 1);
lcd.print("meski terkadang ");
delay(5000); // delay 4
lcd.setCursor(0, 0);
lcd.print("kamu menganggap ");
lcd.setCursor(0, 1);
lcd.print("drimu tak mnrik ");
delay(5000); // delay 5
lcd.setCursor(0, 0);
lcd.print("padahal tnpa kmu");
lcd.setCursor(0, 1);
lcd.print("kthui bagiku kmu");
delay(5000); // delay 6
lcd.setCursor(0, 0);
lcd.print("sangat cantik...");
lcd.setCursor(0, 1);
lcd.print("dan kamu sangat ");
delay(5000); // delay 7
lcd.setCursor(0, 0);
lcd.print("spesial dmata sy");
lcd.setCursor(0, 1);
lcd.print("tp trkdng kmu...");
delay(5000); //delay 8
lcd.setCursor(0, 0);
lcd.print("agak ngeselin...");
lcd.setCursor(0, 1);
lcd.print("tapi ya ternyata");
delay(5000); // delay 9
lcd.setCursor(0, 0);
lcd.print("kmu memang baik,");
lcd.setCursor(0, 1);
lcd.print("kmu sngt pgrtian");
delay(5000); // delay 10
lcd.setCursor(0, 0);
lcd.print("& trkadang juga ");
lcd.setCursor(0, 1);
lcd.print("kmu sngt cuek...");
delay(5000); // delay 11
lcd.setCursor(0, 0);
lcd.print("tp saya sangat..");
lcd.setCursor(0, 1);
lcd.print("menyayangimu... ");
delay(5000); // delay 12
lcd.setCursor(0, 0);
lcd.print("tanpa kmu sadari");
lcd.setCursor(0, 1);
lcd.print("laki2 yang egois");
delay(5000); // delay 13
lcd.setCursor(0, 0);
lcd.print("& kras kpala ini");
lcd.setCursor(0, 1);
lcd.print("slalu memikirkan");
delay(5000); // delay 14
lcd.setCursor(0, 0);
lcd.print("bgmn cara buat ");
lcd.setCursor(0, 1);
lcd.print("kamu bahagia dan");
delay(5000); // delay 15
lcd.setCursor(0, 0);
lcd.print("cara agar kamu ");
lcd.setCursor(0, 1);
lcd.print("bangga punya aku");
delay(5000); // delay 16
lcd.setCursor(0, 0);
lcd.print("sama aku terus ya.. ");
lcd.setCursor(0, 1);
lcd.print("cantikku.. ");
delay(5000); // delay 17
lcd.setCursor(0, 0);
lcd.print("bahagia selalu ");
delay(5000); // delay 18
lcd.setCursor(0, 0);
lcd.print("21/04/2005 ");
lcd.setCursor(0, 1);
lcd.print("21/04/2024 ");
delay(5000); //delay 19
// Bersihkan layar
lcd.clear();
}
int frame = 0;
void loop() {
// Buzzer
for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) {
int duration = 1000 / noteDurations[i]; // Calculate the duration of the note
tone(BUZZER_PIN, melody[i], duration); // Play the note
delay(duration * 1.30); // Wait for the note to finish
noTone(BUZZER_PIN); // Stop playing the note
delay(50); // Add a small delay between notes
}
delay(1000); // Wait for 5 seconds before repeating the song
displayLetterI(); // Led Marrix tampilkan huruf I
// tampilan LCD
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
lc.clearDisplay(0);
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
displayHeart(); // Led Matrix tampilkan hati
// tampilan LCD
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500); // Tahan selama 0.5 detik
lc.clearDisplay(0);
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY ");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
displayLetterU(); //led Matrix tampilkan huruf U
// tampilan LCD
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
lc.clearDisplay(0);
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
//mulai tanpa jeda
displayLetterI(); //Led Matrix tampilkan huruf I
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
displayHeart();
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
displayLetterU();
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
displayLetterI();
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
displayHeart();
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
displayLetterU();
lcd.setCursor(2, 0);
lcd.print("HAPPY B'DAY");
lcd.setCursor(0, 1);
lcd.print(" RARA ");
delay(500);
lc.clearDisplay(0);
lcd.clear();
delay(500);
}
void displayLetterI() {
// tampilkan huruf "I"
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, letter_I[row]);
}
}
void displayHeart(){
// Tampilkan gambar hati pada setiap baris dot matrix
for(int row = 0; row < 8; row++) {
lc.setRow(0, row, heart[row]);
}
}
void displayLetterU(){
// Tampilkan gambar huruf "U" pada setiap baris dot matrix
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, letter_U[row]);
}
}