#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Lebar layar OLED
#define SCREEN_HEIGHT 64 // Tinggi layar OLED
#define OLED_RESET -1
// Definisi pin buzzer
#define BUZZER_PIN 23
// Inisialisasi objek OLED
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Durasi dan frekuensi untuk setiap nada lagu "Happy Birthday"
const int durations[] = {400, 400, 800, 400, 400, 800, 400, 400, 400, 400, 400, 800, 400, 400, 800, 400, 400, 800, 400, 400, 800, 400, 400, 400, 400, 800};
const int notes[] = {262, 262, 294, 262, 349, 330, 262, 262, 294, 262, 392, 349, 262, 262, 523, 440, 349, 330, 294, 466, 466, 440, 349, 392, 349};
const char *lyrics[] = {
"Happy",
"birthday",
"to you,",
"Happy",
"birthday",
"to you,",
"Happy",
"birthday",
"dear Ovi,",
"Happy",
"birthday",
"to you!"
};
void playTone(int tone, int duration) {
ledcWriteTone(0, tone); // Mengatur frekuensi nada
delay(duration);
ledcWriteTone(0, 0); // Mematikan nada
delay(50); // Waktu jeda antara nada
}
void setup() {
// Konfigurasi buzzer
ledcSetup(0, 2000, 8);
ledcAttachPin(BUZZER_PIN, 0);
// Inisialisasi komunikasi I2C untuk layar OLED
Wire.begin(12, 14); // GPIO 21 = SDA, GPIO 22 = SCL
// Inisialisasi layar OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Tampilkan lirik awal pada layar OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Happy Birthday Ovi!");
display.display();
}
void loop() {
// Memainkan lagu "Happy Birthday" dan menampilkan liriknya
for (int i = 0; i < sizeof(notes) / sizeof(notes[0]); i++) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("17 years old Ovi");
// Menampilkan lirik sesuai instrumen
if (i < sizeof(lyrics) / sizeof(lyrics[0])) {
display.setCursor(0, 10);
display.print(lyrics[i]);
}
display.display();
playTone(notes[i], durations[i]);
}
delay(5000); // Jeda antara pemutaran lagu
}