/*
* ESP32 PWM Sequential LED
* Mengontrol 3 LED secara berurutan dengan PWM
*/
// Pin definitions
const int ledPin1 = 16; // GPIO16
const int ledPin2 = 17; // GPIO17
const int ledPin3 = 5; // GPIO5
// PWM properties
const int freq = 5000;
const int resolution = 8;
void setup() {
Serial.begin(115200);
Serial.println("ESP32 Sequential LED PWM - Started");
// Attach all pins to PWM with same settings
ledcAttach(ledPin1, freq, resolution);
ledcAttach(ledPin2, freq, resolution);
ledcAttach(ledPin3, freq, resolution);
// Pastikan semua LED mati di awal
ledcWrite(ledPin1, 0);
ledcWrite(ledPin2, 0);
ledcWrite(ledPin3, 0);
}
void loop() {
// Variasi 1: LED menyala berurutan, tetap nyala, lalu fade out berurutan
sequentialFadeKeepOn();
delay(1000);
// Variasi 2: LED menyala berurutan, tetap nyala, lalu mati berurutan
// sequentialOnKeepOn();
// delay(1000);
// Variasi 3: LED menyala berurutan, tetap nyala, lalu mati bersamaan
// sequentialOnAllOff();
// delay(1000);
}
// Fungsi LED menyala berurutan dengan fade, tetap nyala, lalu fade out berurutan
void sequentialFadeKeepOn() {
int ledPins[] = {ledPin1, ledPin2, ledPin3};
// Fase 1: Menyalakan setiap LED secara berurutan (tetap nyala)
for(int i = 0; i < 3; i++) {
// Fade in LED ke-i
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) {
ledcWrite(ledPins[i], dutyCycle);
delay(10);
}
delay(300); // Jeda sebelum menyalakan LED berikutnya
}
// Fase 2: Semua LED tetap menyala untuk beberapa saat
delay(2000);
// Fase 3: Matikan LED secara berurutan dengan fade out
for(int i = 0; i < 3; i++) {
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) {
ledcWrite(ledPins[i], dutyCycle);
delay(10);
}
delay(300); // Jeda sebelum mematikan LED berikutnya
}
}
// Fungsi LED menyala berurutan tanpa fade, tetap nyala, lalu mati berurutan
void sequentialOnKeepOn() {
int ledPins[] = {ledPin1, ledPin2, ledPin3};
// Fase 1: Menyalakan setiap LED secara berurutan
for(int i = 0; i < 3; i++) {
ledcWrite(ledPins[i], 255); // Nyalakan LED
delay(500); // Jeda sebelum LED berikutnya
}
// Fase 2: Semua LED tetap menyala
delay(2000);
// Fase 3: Matikan LED secara berurutan
for(int i = 0; i < 3; i++) {
ledcWrite(ledPins[i], 0); // Matikan LED
delay(500); // Jeda sebelum LED berikutnya
}
}
// Fungsi LED menyala berurutan, tetap nyala, lalu mati bersamaan
void sequentialOnAllOff() {
int ledPins[] = {ledPin1, ledPin2, ledPin3};
// Fase 1: Menyalakan setiap LED secara berurutan
for(int i = 0; i < 3; i++) {
ledcWrite(ledPins[i], 255); // Nyalakan LED
delay(500); // Jeda sebelum LED berikutnya
}
// Fase 2: Semua LED tetap menyala
delay(2000);
// Fase 3: Matikan semua LED bersamaan
for(int i = 0; i < 3; i++) {
ledcWrite(ledPins[i], 0);
}
}