Lauflicht mit PWM

Hallo an alle,

kann mir jemand helfen um verschiedene Subprogramme in einen zeitlichen Ablauf und Schleife zu bringen? Es sind 3 LED's die ich aktuell nur von 1 auf 2 auf 3 bekomme aber nicht mehr rückwärts und geschweige denn einen erneuten Loop. Im Moment sind die Subprogramme nur fürs LED faden. Benötige ich für den Ablauf auch noch Programme fürs On/Off, damit diese Zeiten ebenfalls definiert sind?

Mein Programmcode ist:

int L1FI=0;                               // Zeitpunkt Fade in LED1
int L1FO =8000;                           // Zeitpunkt Fade out LED1
int L2FI=8000;                            // Zeitpunkt Fade in LED2
int L2FO =16000;                          // Zeitpunkt Fade out LED2
int L3FI=16000;                           // Zeitpunkt Fade in LED3
int L3FO =24000;                          // Zeitpunkt Fade out LED3



int LED1 = 9;                             // LED 1
int LED2 = 10;                            // LED 2
int LED3 = 11;                            // LED 3
int ledState1 =0;                         // Status LED 1   
int ledState2 =0;                         // Status LED 2
int ledState3 =0;                         // Status LED 3


const int fadeAmount1 = 5;                // Stufen im Fadingraster LED1
const int fadeAmount2 = 5;                // Stufen im Fadingraster LED2
const int fadeAmount3 = 5;                // Stufen im Fadingraster LED3

const long interval11 = 40;               // Zeitraum zwischen Fadingstufen LED1
const long interval12 = 40;               // Zeitraum zwischen Fadingstufen LED2
const long interval13 = 40;               // Zeitraum zwischen Fadingstufen LED3

unsigned int brightness1 = 0;             // aktuelle Helligkeit der LED1
unsigned int brightness2 = 0;             // aktuelle Helligkeit der LED2
unsigned int brightness3 = 0;             // aktuelle Helligkeit der LED3

unsigned long Laufzeit;                   // Timer für Ablauf
unsigned long Trigger;                    // Timer für Ablauf
unsigned long previousMillis1 = 0;        // Timer für Fading LED 1
unsigned long currentMillis1;             // Timer für Fading LED 1
unsigned long previousMillis2 = 0;        // Timer für Fading LED 2
unsigned long currentMillis2;             // Timer für Fading LED 2
unsigned long previousMillis3 = 0;        // Timer für Fading LED 3
unsigned long currentMillis3;             // Timer für Fading LED 3

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

void setup ()
{
 Serial.begin(9600);
 pinMode(LED1,OUTPUT);
 pinMode(LED2,OUTPUT);
 pinMode(LED3,OUTPUT);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------



void loop()
{

Serial.println(ledState1); 
Serial.println(ledState2);  
Serial.println(ledState3);  
Trigger=millis();

if(Trigger - Laufzeit > L1FI && ledState1 == 0)
LED1_FI();

if(Trigger - Laufzeit > L1FO && ledState1 == 1)
LED1_FO();

if(Trigger - Laufzeit > L2FI&& ledState2 == 0)
LED2_FI();

if(Trigger - Laufzeit > L2FO&& ledState2 == 1)
LED2_FO();

if(Trigger - Laufzeit > L3FI&& ledState3 == 0)
LED3_FI();

if(Trigger - Laufzeit > L3FO&& ledState3 == 1)
LED3_FO();

}



//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
void LED1_FI()
{
    currentMillis1 = millis(); 
  
    if((brightness1 < 255) && (currentMillis1 - previousMillis1 > interval11))
    {  
    previousMillis1 = currentMillis1;
    analogWrite(LED1, brightness1);          // erhöhe die Helligkeit der LED ->
    brightness1 = brightness1 + fadeAmount1;  // in den Schritten wie oben definiert      
    }

    if (brightness1 == 255)
    {
    ledState1 =1;
    }
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
void LED1_FO()
{  
    currentMillis1 = millis(); 
  
    if((brightness1 > 0) && (currentMillis1 - previousMillis1 > interval11))                                         
    {  
    previousMillis1 = currentMillis1;
    analogWrite(LED1, brightness1);          // veringere die Helligkeit der LED <-
    brightness1 = brightness1 - fadeAmount1;  // in den Schritten wie oben definiert      
    }
    
    if (brightness1 == 0)
    {
    ledState1 =2;
    }
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
void LED2_FI()
{
    currentMillis2 = millis(); 
  
    if((brightness2 < 255) && (currentMillis2 - previousMillis2 > interval12))
    {  
    previousMillis2 = currentMillis2;
    analogWrite(LED2, brightness2);          // erhöhe die Helligkeit der LED ->
    brightness2 = brightness2 + fadeAmount2;  // in den Schritten wie oben definiert      
    }

    if (brightness2 == 255)
    {
    ledState2 =1;
    }
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
void LED2_FO()
{  
    currentMillis2 = millis(); 
  
    if((brightness2 > 0) && (currentMillis2 - previousMillis2 > interval12))
    {  
    previousMillis2 = currentMillis2;
    analogWrite(LED2, brightness2);          // veringere die Helligkeit der LED <-
    brightness2 = brightness2 - fadeAmount2;  // in den Schritten wie oben definiert
    }

    if (brightness2 == 0)
    {
    ledState2 =2;
    }
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
void LED3_FI()
{  
    currentMillis3 = millis(); 
  
    if((brightness3 < 255) && (currentMillis3 - previousMillis3 > interval13))
    {  
    previousMillis3 = currentMillis3;
    analogWrite(LED3, brightness3);          // erhöhe die Helligkeit der LED ->
    brightness3 = brightness3 + fadeAmount3;  // in den Schritten wie oben definiert
    }
    
    if (brightness3 == 255)
    {
    ledState3 =1;
    }
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
void LED3_FO()
{  
    currentMillis3 = millis(); 
  
    if((brightness3 > 0) && (currentMillis3 - previousMillis3 > interval13))
    {  
    previousMillis3 = currentMillis3;
    analogWrite(LED3, brightness3);          // veringere die Helligkeit der LED <-
    brightness3 = brightness3 - fadeAmount3;  // in den Schritten wie oben definiert    
    }

    if (brightness3 == 0)
    {
    ledState3 =2;
    }
 }

Vielen Dank für Feedback.

Toni14:
kann mir jemand helfen um verschiedene Subprogramme in einen zeitlichen Ablauf und Schleife zu bringen? Es sind 3 LED's die ich aktuell nur von 1 auf 2 auf 3 bekomme aber nicht mehr rückwärts und geschweige denn einen erneuten Loop.

Kann es sein, dass Du inzwischen zwei verschiedene Themen zum selben Problem aufgemacht hast:
http://forum.arduino.cc/index.php?topic=261202.0
Themen-Spamming???

Im übrigen scheint es sich um einen modifizierten Larson-Scanner zu handeln, den Du programmieren möchtest, mit einem Lichteffekt, der mit Richtungswechsel immer hin und her pendelt.

Als Ausgangsbasis würde ich mir mit den Suchbegriffen "arduino larson scanner" passenden Ausgangscode suchen und entsprechend Deinen Anforderungen abändern.

Mit etwas suchen im deutschen Forum findest du von Jurs oder mir den passenden Code für den Larson Scanner, der auch als nonBlocking Funktion durchgeht.