// Define the GPIO pins for the LEDs
const int I_LEDS[] = {2, 4, 5};
const int HEART_LEDS[] = {12, 13, 14, 15, 16, 17, 18, 19, 21, 22};
const int U_LEDS[] = {23, 25, 26, 27, 32, 33};
// Define the number of LEDs in each group
const int NUM_I_LEDS = sizeof(I_LEDS) / sizeof(I_LEDS[0]);
const int NUM_HEART_LEDS = sizeof(HEART_LEDS) / sizeof(HEART_LEDS[0]);
const int NUM_U_LEDS = sizeof(U_LEDS) / sizeof(U_LEDS[0]);
// Define the delay times for each pattern
const int PATTERN_DELAY = 200; // milliseconds
const int THEATER_CHASE_DELAY = 100; // milliseconds
void setup() {
// Initialize all the LED pins as outputs
for (int i = 0; i < NUM_I_LEDS; i++) {
pinMode(I_LEDS[i], OUTPUT);
}
for (int i = 0; i < NUM_HEART_LEDS; i++) {
pinMode(HEART_LEDS[i], OUTPUT);
}
for (int i = 0; i < NUM_U_LEDS; i++) {
pinMode(U_LEDS[i], OUTPUT);
}
}
void loop() {
// Pattern 1: Knight Rider
for (int cycle = 0; cycle < 5; cycle++) {
knightRiderPattern();
}
// Pattern 2: Alternating Blink
for (int cycle = 0; cycle < 5; cycle++) {
alternatingBlinkPattern();
}
// Pattern 3: Theater Chase
for (int cycle = 0; cycle < 5; cycle++) {
theaterChasePattern();
}
}
// Pattern 1: Knight Rider
void knightRiderPattern() {
int delayTime = 100;
// Create the Knight Rider effect
for (int i = 0; i < NUM_I_LEDS + NUM_HEART_LEDS + NUM_U_LEDS; i++) {
if (i < NUM_I_LEDS) {
digitalWrite(I_LEDS[i], HIGH);
} else if (i < NUM_I_LEDS + NUM_HEART_LEDS) {
digitalWrite(HEART_LEDS[i - NUM_I_LEDS], HIGH);
} else {
digitalWrite(U_LEDS[i - NUM_I_LEDS - NUM_HEART_LEDS], HIGH);
}
delay(delayTime);
// Turn off the previous LED
if (i >= NUM_I_LEDS) {
if (i >= NUM_I_LEDS + NUM_HEART_LEDS) {
digitalWrite(U_LEDS[i - NUM_I_LEDS - NUM_HEART_LEDS], LOW);
} else {
digitalWrite(HEART_LEDS[i - NUM_I_LEDS], LOW);
}
} else {
digitalWrite(I_LEDS[i], LOW);
}
}
}
// Pattern 2: Alternating Blink
void alternatingBlinkPattern() {
// Blink the letter I LEDs
for (int i = 0; i < NUM_I_LEDS; i++) {
digitalWrite(I_LEDS[i], HIGH);
}
delay(PATTERN_DELAY);
for (int i = 0; i < NUM_I_LEDS; i++) {
digitalWrite(I_LEDS[i], LOW);
}
delay(PATTERN_DELAY);
// Blink the heart LEDs
for (int i = 0; i < NUM_HEART_LEDS; i++) {
digitalWrite(HEART_LEDS[i], HIGH);
}
delay(PATTERN_DELAY);
for (int i = 0; i < NUM_HEART_LEDS; i++) {
digitalWrite(HEART_LEDS[i], LOW);
}
delay(PATTERN_DELAY);
// Blink the letter U LEDs
for (int i = 0; i < NUM_U_LEDS; i++) {
digitalWrite(U_LEDS[i], HIGH);
}
delay(PATTERN_DELAY);
for (int i = 0; i < NUM_U_LEDS; i++) {
digitalWrite(U_LEDS[i], LOW);
}
delay(PATTERN_DELAY);
}
// Pattern 3: Theater Chase
void theaterChasePattern() {
const int TOTAL_LEDS = NUM_I_LEDS + NUM_HEART_LEDS + NUM_U_LEDS;
int allPins[TOTAL_LEDS];
// Combine all LED pins into a single array
int index = 0;
for (int i = 0; i < NUM_I_LEDS; i++) {
allPins[index++] = I_LEDS[i];
}
for (int i = 0; i < NUM_HEART_LEDS; i++) {
allPins[index++] = HEART_LEDS[i];
}
for (int i = 0; i < NUM_U_LEDS; i++) {
allPins[index++] = U_LEDS[i];
}
// Theater chase effect
for (int j = 0; j < 10; j++) { // Number of chase steps
for (int i = 0; i < TOTAL_LEDS; i++) {
digitalWrite(allPins[i], (i + j) % 3 == 0 ? HIGH : LOW);
}
delay(THEATER_CHASE_DELAY);
// Turn off all LEDs
for (int i = 0; i < TOTAL_LEDS; i++) {
digitalWrite(allPins[i], LOW);
}
}
}