// Pin settings
const int ledPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // LED pins
const int btnPin = 2; // Button pin
// Variables
int pattern = 0; // Pattern index
bool btnPressed = false; // Button state
unsigned long prevMillis = 0;
const unsigned long interval = 500; // Time interval for LED changes
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT); // Set LED pins as output
}
pinMode(btnPin, INPUT_PULLUP); // Set button pin as input
}
void loop() {
if (digitalRead(btnPin) == LOW && !btnPressed) {
btnPressed = true;
pattern = (pattern + 1) % 5; // Cycle through 5 patterns
delay(200); // Debounce delay
} else if (digitalRead(btnPin) == HIGH) {
btnPressed = false;
}
switch (pattern) {
case 0:
pattern1();
break;
case 1:
pattern2();
break;
case 2:
pattern3();
break;
case 3:
pattern4();
break;
case 4:
pattern5();
break;
}
}
// Pattern 1: LED chase from pin 6 to pin 13, on then off
void pattern1() {
static int cnt = 0;
unsigned long curMillis = millis();
if (curMillis - prevMillis >= interval) {
prevMillis = curMillis;
allOff();
digitalWrite(ledPins[cnt], HIGH);
cnt++;
if (cnt >= 8) cnt = 0;
}
}
// Pattern 2: LED chase from pin 13 to pin 6, on then off
void pattern2() {
static int cnt = 7;
unsigned long curMillis = millis();
if (curMillis - prevMillis >= interval) {
prevMillis = curMillis;
allOff();
digitalWrite(ledPins[cnt], HIGH);
cnt--;
if (cnt < 0) cnt = 7;
}
}
// Pattern 3: LEDs from pin 13 and 6 run towards each other, then back
void pattern3() {
static int cnt = 0;
unsigned long curMillis = millis();
if (curMillis - prevMillis >= interval) {
prevMillis = curMillis;
allOff();
digitalWrite(ledPins[cnt], HIGH);
digitalWrite(ledPins[7 - cnt], HIGH);
cnt++;
if (cnt > 3) cnt = 0;
}
}
// Pattern 4: LEDs chase from pin 6 to pin 13, stay on, then off all and repeat
void pattern4() {
static int cnt = 0;
unsigned long curMillis = millis();
if (curMillis - prevMillis >= interval) {
prevMillis = curMillis;
allOff();
for (int i = 0; i <= cnt; i++) {
digitalWrite(ledPins[i], HIGH);
}
cnt++;
if (cnt >= 8) {
allOff();
cnt = 0;
}
}
}
// Pattern 5: All LEDs on, then off
void pattern5() {
static bool ledsOn = false;
unsigned long curMillis = millis();
if (curMillis - prevMillis >= 1000) {
prevMillis = curMillis;
ledsOn = !ledsOn;
if (ledsOn) allOn();
else allOff();
}
}
// Turn all LEDs off
void allOff() {
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
}
// Turn all LEDs on
void allOn() {
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], HIGH);
}
}