// Pins für die LEDs definieren
const int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Array der LED-Pins
const int numLeds = sizeof(ledPins) / sizeof(ledPins[0]); // Anzahl der LEDs
// Pins für die zufällig blinkenden LEDs auf den analogen Ausgängen definieren
const int randomBlinkPins[] = {A2, A3, A4, A5, A6, A7}; // Analoge Pins als digitale Ausgänge
const int numRandomBlinkPins = sizeof(randomBlinkPins) / sizeof(randomBlinkPins[0]);
void setup() {
// Alle Pins als Ausgänge definieren
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Alle LEDs zu Beginn ausschalten
}
// Zufallsgenerator initialisieren
randomSeed(analogRead(0));
}
void loop() {
// Zufälligen Funktionsaufruf
int functionToCall = random(0, 4); // Zufallszahl zwischen 0 und 3, um alle Funktionen abzudecken
switch (functionToCall) {
case 0:
classic();
break;
case 1:
blinkAll(5000, 200);
break;
case 2:
sideFly();
break;
case 3:
leftRight();
break;
}
delay(100); // Warte 100 ms zwischen den Funktionsaufrufen
}
// Flacker-Animation in eigene Funktion auslagern
void flickerEffect(int duration) {
unsigned long startTime = millis();
while (millis() - startTime < duration) { // Flackern für die angegebene Dauer
int numBlinkingLeds = random(1, 6); // Zufällig 1 bis 5 LEDs auswählen
for (int k = 0; k < numBlinkingLeds; k++) {
int randomLed = random(0, numLeds); // Zufällige LED auswählen
digitalWrite(ledPins[randomLed], LOW); // LED aus
delay(random(20, 150)); // Kurze Verzögerung für kaputtes Flackern
digitalWrite(ledPins[randomLed], HIGH); // LED wieder an
delay(random(50, 600)); // Kurze Verzögerung für kaputtes Flackern
}
}
}
void blinkAll(int duration, int interval) {
unsigned long startTime = millis();
while (millis() - startTime < duration) {
// Alle LEDs einschalten
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], HIGH);
}
delay(interval);
// Alle LEDs ausschalten
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
delay(interval);
}
}
void classic() {
const byte patterns[] = {
B00000000, B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000,
B10000001, B10000010, B10000100, B10001000, B10010000, B10100000, B11000000, B11000001,
B11000010, B11000100, B11001000, B11010000, B11100000, B11100001, B11100010, B11100100,
B11101000, B11110000, B11110001, B11110010, B11110100, B11111000, B11111001, B11111010,
B11111100, B11111101, B11111110, B11111111
};
const int numPatterns = sizeof(patterns) / sizeof(patterns[0]);
for (int i = 0; i < numPatterns; i++) {
for (int j = 0; j < numLeds; j++) {
digitalWrite(ledPins[j], bitRead(patterns[i], j) ? HIGH : LOW);
}
delay(500);
if (patterns[i] == B11111111) {
flickerEffect(5000);
}
}
for (int i = numPatterns - 1; i >= 0; i--) {
for (int j = 0; j < numLeds; j++) {
digitalWrite(ledPins[j], bitRead(patterns[i], j) ? HIGH : LOW);
}
delay(500);
}
delay(1000);
}
void sideFly() {
const byte patterns[] = {
B00000000, B10000001, B01000010, B00100100, B00011000, B10011001, B01011010, B00111100, B10111101,
B01111110, B11111111
};
const int numPatterns = sizeof(patterns) / sizeof(patterns[0]);
for (int i = 0; i < numPatterns; i++) {
for (int j = 0; j < numLeds; j++) {
digitalWrite(ledPins[j], bitRead(patterns[i], j) ? HIGH : LOW);
}
delay(500);
if (patterns[i] == B11111111) {
flickerEffect(5000);
}
}
for (int i = numPatterns - 1; i >= 0; i--) {
for (int j = 0; j < numLeds; j++) {
digitalWrite(ledPins[j], bitRead(patterns[i], j) ? HIGH : LOW);
}
delay(500);
}
delay(1000);
}
void leftRight() {
const byte patterns[] = {
B00111111, B11100000
};
const int numPatterns = sizeof(patterns) / sizeof(patterns[0]);
for (int y = 0; y < 5; y++) {
for (int i = 0; i < numPatterns; i++) {
for (int j = 0; j < numLeds; j++) {
digitalWrite(ledPins[j], bitRead(patterns[i], j) ? HIGH : LOW);
}
delay(500);
}
}
blinkAll(5000, 200);
}