// ==========================================
// 8 LED DJ DISCO + HAPPY BIRTHDAY
// ESP32 WOKWI
// ==========================================
int led[] = {19, 18, 5, 17, 16, 4, 0, 2};
int jumlahLED = 8;
int buzzer = 23;
// ==========================================
// SETUP
// ==========================================
void setup() {
for (int i = 0; i < jumlahLED; i++) {
pinMode(led[i], OUTPUT);
digitalWrite(led[i], LOW);
}
pinMode(buzzer, OUTPUT);
}
// ==========================================
// SEMUA LED NYALA
// ==========================================
void semuaNyala() {
for (int i = 0; i < jumlahLED; i++) {
digitalWrite(led[i], HIGH);
}
}
// ==========================================
// SEMUA LED MATI
// ==========================================
void semuaMati() {
for (int i = 0; i < jumlahLED; i++) {
digitalWrite(led[i], LOW);
}
}
// ==========================================
// LED BERGANTIAN CEPAT
// ==========================================
void ledBergantian() {
// LED ganjil
for (int i = 0; i < jumlahLED; i += 2) {
digitalWrite(led[i], HIGH);
}
tone(buzzer, 150);
delay(120);
semuaMati();
noTone(buzzer);
delay(50);
// LED genap
for (int i = 1; i < jumlahLED; i += 2) {
digitalWrite(led[i], HIGH);
}
tone(buzzer, 200);
delay(120);
semuaMati();
noTone(buzzer);
delay(50);
}
// ==========================================
// LOOP UTAMA
// ==========================================
void loop() {
// ========================================
// 🔥 INTRO DJ
// ========================================
// LED lari kiri ke kanan
for (int i = 0; i < 8; i++) {
digitalWrite(led[i], HIGH);
tone(buzzer, 300 + i * 100);
delay(70);
digitalWrite(led[i], LOW);
noTone(buzzer);
delay(20);
}
// LED lari kanan ke kiri
for (int i = 7; i >= 0; i--) {
digitalWrite(led[i], HIGH);
tone(buzzer, 1000 - i * 80);
delay(70);
digitalWrite(led[i], LOW);
noTone(buzzer);
delay(20);
}
// ========================================
// 💥 DJ BEAT DROP
// ========================================
for (int i = 0; i < 8; i++) {
ledBergantian();
}
// ========================================
// 🔥 FINAL INTRO
// ========================================
for (int i = 0; i < 5; i++) {
semuaNyala();
tone(buzzer, 800);
delay(80);
semuaMati();
noTone(buzzer);
delay(60);
}
// ========================================
// 🎂 HAPPY BIRTHDAY
// ========================================
int melody[] = {
// Happy
262, 262, 294, 262, 349, 330,
// Birthday
262, 262, 294, 262, 392, 349,
// Dear ...
262, 262, 523, 440, 349, 330, 294,
// Happy Birthday to You
466, 466, 440, 349, 392, 349
};
int duration[] = {
250, 250, 500, 500, 500, 1000,
250, 250, 500, 500, 500, 1000,
250, 250, 500, 500, 500, 500, 1000,
250, 250, 500, 500, 500, 1000
};
int jumlahNada = 24;
// ========================================
// 🎵 HAPPY BIRTHDAY + LED DISCO
// ========================================
for (int i = 0; i < jumlahNada; i++) {
// LED berganti sesuai nada
int ledAktif = i % 8;
digitalWrite(led[ledAktif], HIGH);
// Mainkan nada
tone(buzzer, melody[i]);
// Beat
delay(duration[i] * 0.7);
// LED mati
digitalWrite(led[ledAktif], LOW);
noTone(buzzer);
delay(duration[i] * 0.3);
}
// ========================================
// 🔥 HAPPY BIRTHDAY DROP
// ========================================
for (int i = 0; i < 10; i++) {
// Ganjil
for (int j = 0; j < 8; j += 2) {
digitalWrite(led[j], HIGH);
}
tone(buzzer, 150);
delay(100);
semuaMati();
noTone(buzzer);
delay(50);
// Genap
for (int j = 1; j < 8; j += 2) {
digitalWrite(led[j], HIGH);
}
tone(buzzer, 200);
delay(100);
semuaMati();
noTone(buzzer);
delay(50);
}
// ========================================
// 🎉 FINAL
// ========================================
for (int i = 0; i < 5; i++) {
semuaNyala();
tone(buzzer, 1000);
delay(100);
semuaMati();
noTone(buzzer);
delay(70);
}
// Tunggu sebelum mengulang
delay(1000);
}