/**************************************************************************************************
*
*************************************************************************************************/
//-----------------------------------------------------------------------------------
// IO-Ports
//-----------------------------------------------------------------------------------
#define Led_Test 12
const int ledPins[] = {3, 5, 6, 9, 11, 7, 4, 2}; // Pins für die LEDs
const int numLeds = sizeof(ledPins) / sizeof(ledPins[0]); // Anzahl der LEDs
//---------------------------------------------------------------------------------------------------------------
// LED Status
//---------------------------------------------------------------------------------------------------------------
//LED Zufall Ein und Aus
int onDurationMin[] = { 1, 2, 3, 4, 5, 6, 7, 8}; // Mindestdauer für LED ein
int onDurationMax[] = { 5, 6, 7, 8, 9, 10, 11, 12}; // Höchstdauer für LED ein
int offDurationMin[] = { 1, 2, 3, 4, 5, 6, 7, 8}; // Mindestdauer für LED aus
int offDurationMax[] = { 5, 6, 7, 8, 9, 10, 11, 12}; // Höchstdauer für LED aus
byte LedMode[] = { 2, 0, 3, 0, 0, 1, 0, 0}; // 0=aus, 1=ein, 2=Zufall, 3=flackern
unsigned long nextToggleTime[numLeds]; // Zeitpunkt der nächsten Umschaltung
bool ledState[numLeds]; // Aktueller Zustand der LEDs (true = an, false = aus)
;
//LED Zufall
unsigned long previousMillis[numLeds] = {0}; // Vorherige Zeitstempel für jede LED
int brightness[numLeds] = {0}; // Aktuelle Helligkeit für jede LED
int interval[numLeds] = {0}; // Zeitintervall für jede LED
/*************************************************************************************
* Setup
*************************************************************************************/
void setup(){
;
Serial.begin(9600);
;
//Pinmodes
pinMode(Led_Test, OUTPUT);
for (int i = 0; i < numLeds; i++) {pinMode(ledPins[i], OUTPUT);}
;
//Init fertig
Serial.println("**************************************************");
Serial.println(" Led-Decoder gestartet");
Serial.println("**************************************************");
}
/*************************************************************************************
* Loop
*************************************************************************************/
void loop(){
;
for (int i = 0; i < numLeds; i++) {
byte Mode = LedMode[i];
;
if(Mode == 3){LED_Flackern(i);}
if(Mode == 2){LED_Zufall(i);}
if(Mode == 1){LED_EinAus(i, 1);}
}
}
/*****************************************************************************************
* LED-Steuerung EIN/AUs
*****************************************************************************************/
void LED_EinAus(byte i, bool Zustand){
digitalWrite(ledPins[i],Zustand);
}
/*****************************************************************************************
* LED-Steuerung Flackern
*****************************************************************************************/
void LED_Flackern(byte i){
//Aktuelle Zeit abfragen
unsigned long currentMillis = millis();
//Überprüfen, ob es Zeit ist, die Helligkeit der LED zu ändern
if(currentMillis - previousMillis[i] >= interval[i]) {
brightness[i] = random(100, 255); // Zufällige Helligkeit zwischen 100 und 255
interval[i] = random(50, 200); // Zufällige Zeit für die nächste Änderung (50 bis 200 ms)
previousMillis[i] = currentMillis; // Setze den aktuellen Zeitstempel
analogWrite(ledPins[i], brightness[i]); // Setze die Helligkeit der LED
}
}
/*****************************************************************************************
* LED-Steuerung Zufall
*****************************************************************************************/
void LED_Zufall(byte i){
//Überprüfen, ob es Zeit ist, den Zustand einer LED zu ändern
if (millis() >= nextToggleTime[i]) {
//LED Zustand umschalten
ledState[i] = !ledState[i];
digitalWrite(ledPins[i], ledState[i] ? HIGH : LOW);
//Nächste Umschaltzeit zufällig festlegen
if (ledState[i]) {
//LED ist an, setze die nächste Zeit, wann sie ausgeschaltet wird
nextToggleTime[i] = millis() + random(onDurationMin[i], onDurationMax[i])*1000;
}else{
//LED ist aus, setze die nächste Zeit, wann sie eingeschaltet wird
nextToggleTime[i] = millis() + random(offDurationMin[i], offDurationMax[i])*1000;
}
}
}