// Buatan Drian XII -D
// Judul:
// Lagu Gundul-Gundul Pacul dengan LED dan BUZZER
// Deskripsi :
// Saat tombol dipencet, maka buzzer akan memainkan lagu "Gundul-Gundul Pacul"
// Dan LED akan nyala sesuai dengan nada yang dimainkan
// Misal, C4 = LED Merah, D4 = LED Orange, Dll.
// Lagu akan automatis mati ketika lagu selesai
// Mendefinisikan frekuensi nada
#define C4 261
#define D4 293
#define E4 329
#define F4 349
#define G4 392
#define A4 440
#define B4 493
#define C5 523
#define rest 000
// Menentukan melody serta lama durasinya
int melody[] = {
C4, E4, C4, E4, F4, G4, rest, G4, B4, C5, B4, C5, B4, G4, // Verse 1
C4, E4, C4, E4, F4, G4, rest, G4, B4, C5, B4, C5, B4, G4, // Verse 2
C4, E4, G4, F4, rest, F4, G4, F4, E4, C4, F4, E4, C4, rest, // Reff 1
C4, E4, G4, F4, rest, F4, G4, F4, E4, C4, F4, E4, // Reff 2
C4, D4, E4, F4, G4, A4, B4, C5, // Outro 1
C4, D4, E4, F4, G4, A4, B4, C5, // Outro 2
};
int noteDurations[] = {
500, 750, 250, 500, 500, 400, 100, 1000, 500, 500, 500, 500, 500, 1500, // Verse 1
500, 750, 250, 500, 500, 400, 100, 1000, 500, 500, 500, 500, 500, 1000, // Verse 2
1000, 1000, 1000, 400, 100, 500, 500, 500, 500, 500, 500, 500, 1000, 500, // Reff 1
500, 1000, 1000, 400, 100, 500, 500, 500, 500, 500, 500, 500, 1500, // Reff 2
1000, 1000, 1000, 500, 500, 500, 500, // Outro 1
100, 100, 100, 100, 100, 100, 100, 2000, // Outro 2
};
// Mendefinisikan pin
const int buttonPin = 3;
const int Merah = 13;
const int Orange = 12;
const int Kuning = 11;
const int Hijau = 10;
const int Biru = 9;
const int Aqua = 8;
const int Pink = 7;
const int Ungu = 6;
// Menghungkan note ke pin
int noteToPin[] = {
C4, Merah,
D4, Orange,
E4, Kuning,
F4, Hijau,
G4, Biru,
A4, Aqua,
B4, Pink,
C5, Ungu,
};
// Fungsi untuk menentukan note ke pin
int getPinForNote(int note) {
for (int i = 0; i < sizeof(noteToPin) / sizeof(noteToPin[0]); i += 2) {
if (noteToPin[i] == note) {
return noteToPin[i + 1];
}
}
return -1;
}
void setup() {
pinMode(Merah, OUTPUT);
pinMode(Orange, OUTPUT);
pinMode(Kuning, OUTPUT);
pinMode(Hijau, OUTPUT);
pinMode(Biru, OUTPUT);
pinMode(Aqua, OUTPUT);
pinMode(Pink, OUTPUT);
pinMode(Ungu, OUTPUT);
// Setup speaker pin
pinMode(2, OUTPUT);
// Setup button pin
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// Cek untuk apakah tombol dipencet
if (digitalRead(buttonPin) == LOW) {
// Main nada
for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(melody[0]); thisNote++) {
// Menentukan berapa lama nada
int noteDuration = noteDurations[thisNote];
int note = melody[thisNote];
int pin = getPinForNote(note);
// LMenyalakan lampu LED yang sesuai nada
if (pin != -1) {
digitalWrite(pin, HIGH);
}
// Main nada
tone(2, note, noteDuration);
// Mentukan tempo
delay(noteDuration * 1.00); // dapat diatur sesuai keinginan
// Menghentikan note
noTone(2);
// Mematikan LED pin
if (pin != -1) {
digitalWrite(pin, LOW);
}
}
}
}