// Pin definitions
const int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // LED pins from 2 to 9
const int switchPins[] = {10, 11, 12, 13}; // Switch pins 10, 11, 12, 13
void setup() {
// Set LED pins as outputs
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Set switch pins as inputs
for (int i = 0; i < 4; i++) {
pinMode(switchPins[i], INPUT);
}
// Start serial communication
Serial.begin(9600);
}
void loop() {
// Read switch states
bool sw1 = digitalRead(switchPins[0]) == HIGH;
bool sw2 = digitalRead(switchPins[1]) == HIGH;
bool sw3 = digitalRead(switchPins[2]) == HIGH;
bool sw4 = digitalRead(switchPins[3]) == HIGH;
// Determine speed based on switches
int speed = getSpeed(sw1, sw2); // Get the delay time based on speed level
// Determine the pattern based on the switch combinations
if (!sw3 && sw4) {
patternLeftToRightThenRightToLeft(speed); // 0 0 0 1: Left to Right, then Right to Left
} else if (sw3 && !sw4) {
patternInwardToOutwardThenOutwardToInward(speed); // 0 0 1 0: Inward to Outward, then Outward to Inward
} else if (sw3 && sw4) {
patternAlternateBlink(speed); // 0 0 1 1: Alternate Blink
} else {
turnOffAllLEDs(); // Default state: All LEDs off
}
}
// Function to determine speed based on switches
int getSpeed(bool sw1, bool sw2) {
if (sw1 && sw2) {
return 100; // Very fast
} else if (sw1 || sw2) {
return 500; // Moderate speed
} else {
return 1000; // Slow speed
}
}
// Function to turn off all LEDs
void turnOffAllLEDs() {
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
}
// Pattern 1: LED will go from 2 to 9 (left to right) and back from 9 to 2 (right to left)
void patternLeftToRightThenRightToLeft(int speed) {
// Left to right
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], HIGH);
delay(speed);
digitalWrite(ledPins[i], LOW);
}
// Right to left
for (int i = 7; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH);
delay(speed);
digitalWrite(ledPins[i], LOW);
}
}
// Pattern 2: LED will go inward to outward and then outward to inward
void patternInwardToOutwardThenOutwardToInward(int speed) {
// Inward to outward
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], HIGH);
digitalWrite(ledPins[7 - i], HIGH);
delay(speed);
digitalWrite(ledPins[i], LOW);
digitalWrite(ledPins[7 - i], LOW);
}
// Outward to inward
for (int i = 3; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH);
digitalWrite(ledPins[7 - i], HIGH);
delay(speed);
digitalWrite(ledPins[i], LOW);
digitalWrite(ledPins[7 - i], LOW);
}
}
// Pattern 3: Alternating blink
void patternAlternateBlink(int speed) {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i * 2], HIGH); // Light even-numbered LEDs
}
delay(speed);
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i * 2], LOW);
}
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i * 2 + 1], HIGH); // Light odd-numbered LEDs
}
delay(speed);
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i * 2 + 1], LOW);
}
}