//IG: @rhnm._
#define led_merah 13
#define led_kuning 12
#define led_hijau 11
#define led_putih 9
#define led_pink 8
#define buzzer 10
#define do_t 262
#define mi_t 330
#define fa_t 349
#define sol_t 392
#define la_t 440
// Array untuk menyimpan pasangan frekuensi dan LED
struct Note {
int frequency;
int led;
};
// Not dan LED yang sesuai dalam urutan
Note notes[] = {
{do_t, led_merah}, {do_t, led_merah},
{mi_t, led_kuning}, {mi_t, led_kuning},
{sol_t, led_putih}, {sol_t, led_putih}, {la_t, led_pink},
{la_t, led_pink}, {la_t, led_pink}, {fa_t, led_hijau},
{fa_t, led_hijau}, {sol_t, led_putih},
{sol_t, led_putih}, {sol_t, led_putih}, {mi_t, led_kuning},
{fa_t, led_hijau},
{fa_t, led_hijau}, {fa_t, led_hijau}, {sol_t, led_putih},
{fa_t, led_hijau}, {mi_t, led_kuning}, {do_t, led_merah}
};
int noteDuration = 230; // Durasi nada dalam milidetik
int longNoteDuration = 400; // Durasi nada terakhir di setiap baris
int gapDuration = 50; // Durasi jeda antara nada dalam milidetik
void setup() {
pinMode(led_merah, OUTPUT);
pinMode(led_kuning, OUTPUT);
pinMode(led_hijau, OUTPUT);
pinMode(led_putih, OUTPUT);
pinMode(led_pink, OUTPUT);
digitalWrite(led_merah, HIGH);
digitalWrite(led_kuning, HIGH);
digitalWrite(led_hijau, HIGH);
digitalWrite(led_putih, HIGH);
digitalWrite(led_pink, HIGH);
pinMode(buzzer, OUTPUT);
delay(1000);
}
void loop() {
for (int i = 0; i < sizeof(notes)/sizeof(Note); i++) {
// Durasi nada untuk setiap not
int currentNoteDuration = noteDuration;
// Cek apakah not ini adalah not terakhir di setiap baris
if (i == 6 || i == 11 || i == 14 || i == sizeof(notes)/sizeof(Note) - 1) {
currentNoteDuration = longNoteDuration; // Berikan durasi lebih panjang
}
// Nyalakan LED yang sesuai
digitalWrite(notes[i].led, HIGH);
// Matikan LED lainnya
digitalWrite(led_merah, notes[i].led == led_merah ? HIGH : LOW);
digitalWrite(led_kuning, notes[i].led == led_kuning ? HIGH : LOW);
digitalWrite(led_hijau, notes[i].led == led_hijau ? HIGH : LOW);
digitalWrite(led_putih, notes[i].led == led_putih ? HIGH : LOW);
digitalWrite(led_pink, notes[i].led == led_pink ? HIGH : LOW);
// Mainkan nada
tone(buzzer, notes[i].frequency, currentNoteDuration);
delay(currentNoteDuration); // Tunggu hingga nada selesai dimainkan
// Tambahkan jeda setelah setiap nada untuk memisahkannya
noTone(buzzer); // Matikan buzzer
delay(gapDuration); // Jeda sebelum nada berikutnya
}
delay(150); // jeda sebelum mengulang
}