#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
int speakerPin = 7;
int ledPin1 = 8; // Pin LED 1
int ledPin2 = 9; // Pin LED 2
int ledPin3 = 10; // Pin LED 3
int length = 28;
char notes[] = "GGAGcB GGAGdc GGxecBA yyecdc";
int beats[] = {2, 2, 8, 8, 8, 16, 1, 2, 2, 8, 8, 8, 16, 1, 2, 2, 8, 8, 8, 8, 16, 1, 2, 2, 8, 8, 8, 16};
int tempo = 200;
bool songFinished = false;
void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration) {
char names[] = {'C', 'D', 'E', 'F', 'G', 'A', 'B', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'x', 'y'};
int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956, 834, 765, 593, 468, 346, 224, 655, 715};
int SPEE = 5;
for (int i = 0; i < 17; i++) {
if (names[i] == note) {
int newduration = duration / SPEE;
playTone(tones[i], newduration);
}
}
}
void setup() {
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
lcd.print("RTC tidak ditemukan!");
while (1);
}
if (!rtc.isrunning()) {
rtc.adjust(DateTime(2024, 9, 24, 05, 23, 30)); // Atur waktu RTC
}
lcd.setCursor(0, 0);
String barissatu = " Happy Birthday";
for (int i = 0; i < barissatu.length(); i++) {
lcd.print(barissatu.charAt(i));
delay(200);
}
delay(500);
lcd.setCursor(0, 1);
String barisdua = " TO YOU";
for (int i = 0; i < barisdua.length(); i++) {
lcd.print(barisdua.charAt(i));
delay(200);
}
pinMode(speakerPin, OUTPUT);
pinMode(ledPin1, OUTPUT); // Set pin LED 1 sebagai OUTPUT
pinMode(ledPin2, OUTPUT); // Set pin LED 2 sebagai OUTPUT
pinMode(ledPin3, OUTPUT); // Set pin LED 3 sebagai OUTPUT
}
void loop() {
if (!songFinished) {
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[i] * tempo);
} else {
digitalWrite(ledPin1, HIGH); // Nyalakan LED 1
digitalWrite(ledPin2, HIGH); // Nyalakan LED 2
digitalWrite(ledPin3, HIGH); // Nyalakan LED 3
playNote(notes[i], beats[i] * tempo);
// Matikan LED setelah memainkan nada
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
delay(tempo);
}
}
songFinished = true;
}
lcd.noBacklight();
delay(5000);
lcd.backlight();
while (true) {
DateTime now = rtc.now();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tgl: ");
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.setCursor(0, 1);
lcd.print("Jam: ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
delay(1000);
}
}