const int numLEDs = 19;
const int ledPins[numLEDs] = {2, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33};
const int buttonOnOffPin = 34;
const int buttonDurationPin = 35;
const int buttonPausePin = 39;
const int statusLedPin = 0;
int currentLED = 0;
// Default duration, need to store to EEPROM
unsigned long duration = 500;
bool isRunning = false;
bool isPaused = false;
unsigned long previousMillis = 0;
void setup() {
Serial.begin(115200);
for (int i = 0; i < numLEDs; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(buttonOnOffPin, INPUT_PULLUP);
pinMode(buttonDurationPin, INPUT_PULLUP);
pinMode(buttonPausePin, INPUT_PULLUP);
pinMode(statusLedPin, OUTPUT);
}
void turnOffAllLEDs() {
Serial.println("STOPPED.");
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], LOW);
}
}
void loop()
{
if (digitalRead(buttonOnOffPin) == LOW) {
delay(200);
isRunning = !isRunning;
if (isRunning) {
currentLED = 0;
previousMillis = millis();
//Release Pause
if(isPaused){
isPaused = false;
}
} else {
turnOffAllLEDs();
}
}
if (digitalRead(buttonDurationPin) == LOW) {
delay(200);
// Toggle between durations
if (duration == 500) {
duration = 1000;
}
else if (duration == 1000) {
duration = 2000;
} else if (duration == 2000) {
duration = 3000;
} else if (duration == 3000) {
duration = 4000;
} else if (duration == 4000) {
duration = 5000;
} else {
duration = 1000;
}
Serial.printf("DURATION %d\n", duration);
// Blink status LED based on duration
int blinkCount = duration / 1000;
for (int i = 0; i < blinkCount; i++) {
digitalWrite(statusLedPin, HIGH);
delay(500);
digitalWrite(statusLedPin, LOW);
delay(500);
}
}
if (digitalRead(buttonPausePin) == LOW) {
Serial.println("PAUSED..");
delay(200);
isPaused = !isPaused;
}
// LED sequence logic
if (isRunning && !isPaused) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= duration) {
previousMillis = currentMillis;
turnOffAllLEDs();
if (currentLED < numLEDs) {
Serial.printf("turning on led %d\n",ledPins[currentLED]);
digitalWrite(ledPins[currentLED], HIGH);
currentLED++;
} else {
isRunning = false;
}
}
}
}Loading
esp32-devkit-c-v4
esp32-devkit-c-v4