// 6 LEDs with single enable pin: flicker -> half brightness -> fade-up -> pause -> restart (if loop enabled)const int numLeds = 6;// PWM output pins for LEDsconst int pwmPins[] = { 3, 5, 6, 9, 10, 11 }; // 6 outputs// Single enable pin with pull-up, starts sequence when switched to GNDconst int enablePin = 2; // Single enable pin for all LEDs// Enables restart for each LED (0 = no loop, 1 = loop)const int enableLoop[] = { 0, 0, 0, 0, 0, 0 }; // Loop disabled. Change per LED if needed// const int enableLoop[] = { 1, 1, 1, 1, 1, 1 }; // Loop enabled. Change per LED if needed// Parameters for all LEDs (can be made different per LED)const int minBrightness = 10; // minimum brightnessconst int maxBrightness = 255; // maximum brightnessconst int warmupDuration = 5000; // flicker durationconst int fullBrightnessPause = 3000; // Pause after fade-upconst int fadeDuration = 5000; // duration of fade-up// Status variables per LEDenum LightState { OFF, FLICKER, HALF, FADE_UP, PAUSE };LightState currentState[numLeds] = { OFF };unsigned long stateStartTime[numLeds];unsigned long lastFlickerTime[numLeds];int currentBrightness[numLeds] = { 0 };bool isEnabled = false; // Single enable state for all LEDsvoid setup() { Serial.begin(9600); // Initialize all pins for (int i = 0; i < numLeds; i++) { pinMode(pwmPins[i], OUTPUT); analogWrite(pwmPins[i], 0); } pinMode(enablePin, INPUT_PULLUP);}void loop() { unsigned long currentTime = millis(); // Single enable logic for all LEDs if (!digitalRead(enablePin) && !isEnabled) { isEnabled = true; // Initialize all LEDs to FLICKER state for (int i = 0; i < numLeds; i++) { currentState[i] = FLICKER; stateStartTime[i] = currentTime; lastFlickerTime[i] = currentTime; } Serial.println("All LEDs activated"); } else if (digitalRead(enablePin) && isEnabled) { isEnabled = false; // Turn off all LEDs for (int i = 0; i < numLeds; i++) { currentState[i] = OFF; analogWrite(pwmPins[i], 0); } } if (!isEnabled) return; // Process each LED for (int i = 0; i < numLeds; i++) { ledFlash(i, currentTime); }}void ledFlash(int ledIndex, unsigned long currentTime) { unsigned long stateTime = currentTime - stateStartTime[ledIndex]; switch (currentState[ledIndex]) { case FLICKER: if (stateTime < warmupDuration) { // Flicker phase if (currentTime - lastFlickerTime[ledIndex] >= 50) { lastFlickerTime[ledIndex] = currentTime; currentBrightness[ledIndex] = random(minBrightness, maxBrightness); analogWrite(pwmPins[ledIndex], currentBrightness[ledIndex]); } } else { currentState[ledIndex] = HALF; stateStartTime[ledIndex] = currentTime; currentBrightness[ledIndex] = maxBrightness / 2; analogWrite(pwmPins[ledIndex], currentBrightness[ledIndex]); Serial.print("LED "); Serial.print(ledIndex); Serial.println(" half brightness"); } break; case HALF: if (stateTime >= 1000) { currentState[ledIndex] = FADE_UP; stateStartTime[ledIndex] = currentTime; Serial.print("LED "); Serial.print(ledIndex); Serial.println(" start fade-up"); } break; case FADE_UP: { float progress = min(1.0, (float)stateTime / fadeDuration); currentBrightness[ledIndex] = maxBrightness / 2 + (maxBrightness / 2) * progress; analogWrite(pwmPins[ledIndex], currentBrightness[ledIndex]); if (progress >= 1.0) { currentState[ledIndex] = PAUSE; stateStartTime[ledIndex] = currentTime; Serial.print("LED "); Serial.print(ledIndex); Serial.println(" full brightness reached"); } } break; case PAUSE: if (stateTime >= fullBrightnessPause && enableLoop[ledIndex] == 1) { // Restart the whole sequence currentState[ledIndex] = FLICKER; stateStartTime[ledIndex] = currentTime; Serial.print("LED "); Serial.print(ledIndex); Serial.println(" restart sequence"); } break; case OFF: // Shouldn't get here when enabled break; }}