Thank you for answer!
This is my code right now.
Maybe a global variable is the best?
//https://forum.arduino.cc/index.php?topic=548353.msg3740954#msg3740954
const byte ledPins[] = {10};
byte LEDCOUNT = sizeof(ledPins) / sizeof(ledPins[0]);
byte ledIndex = 0;
const unsigned long FIVESECS = 5000;
const unsigned long OFFSECS = 5000;
unsigned long currentTime;
unsigned long startTime;
enum states
{
ALL_FLASH,
ALL_FADE_UP_TOGETHER,
ALL_ON_FOR_5_SECS,
ALL_OFF_FOR_5_SECS,
ALL_FADE_DOWN_TOGETHER,
ALL_FADE_UP_DOWN_IN_SEQUENCE,
DO_NOTHING
};
byte currentState = ALL_FLASH;
void setup()
{
Serial.begin(9600);
for (int pin = 0; pin < LEDCOUNT; pin ++)
{
pinMode(ledPins[pin], OUTPUT);
digitalWrite(ledPins[pin], LOW);
}
Serial.println("Flash all up together");
}
void loop()
{
currentTime = millis();
switch (currentState)
{
case ALL_FLASH:
{
static int pwmLevel = 255;
/* static int pwmIncrement = -255;
unsigned long period = 20;
if (currentTime - startTime >= period)
{*/
Serial.println("All Flash: ");
Serial.println(pwmLevel);
setPwmLevelForAllLeds(pwmLevel);
startTime = millis();
// pwmLevel += pwmIncrement;
if (pwmLevel == 255)
{
setPwmLevelForAllLeds(0);
currentState = ALL_ON_FOR_5_SECS;
startTime = currentTime;
setPwmLevelForAllLeds(255); //all on
Serial.println("All ON 5 seconds");
// }
}
}
break;
//*****
case ALL_FADE_UP_TOGETHER:
{
static int pwmLevel = 0;
static int pwmIncrement = +1;
unsigned long period = 20;
if (currentTime - startTime >= period)
{
setPwmLevelForAllLeds(pwmLevel);
startTime = millis();
pwmLevel += pwmIncrement;
if (pwmLevel >= 255)
{
setPwmLevelForAllLeds(0);
currentState = ALL_ON_FOR_5_SECS;
startTime = currentTime;
setPwmLevelForAllLeds(255); //all on
Serial.println("Waiting 5 seconds");
}
}
}
break;
//*****
case ALL_ON_FOR_5_SECS:
if (currentTime - startTime >= FIVESECS)
{
currentState = ALL_FADE_DOWN_TOGETHER;
Serial.println("Fading all down together");
startTime = currentTime;
setPwmLevelForAllLeds(255); //all on
}
break;
//*****
case ALL_OFF_FOR_5_SECS:
if (currentTime - startTime >= OFFSECS)
{
currentState = ALL_FLASH;
Serial.println("All flash");
startTime = currentTime;
setPwmLevelForAllLeds(255); //all on
}
break;
//*****
case ALL_FADE_DOWN_TOGETHER:
// case ALL_FADE_UP_TOGETHER:
{
static int pwmLevel = 255;
static int pwmIncrement = 1;
unsigned long period = 7; // 7 egen
if (currentTime - startTime >= period)
{
if (pwmLevel == -1)
{
Serial.println("Fade down level -1: ");
Serial.println(pwmLevel);
pwmLevel = 255;
}
setPwmLevelForAllLeds(pwmLevel);
startTime = millis();
Serial.println("Fade down - period: ");
Serial.println(pwmLevel);
pwmLevel -= pwmIncrement;
if (pwmLevel == 0) // original <=
{
setPwmLevelForAllLeds(0); //all off
currentState = ALL_OFF_FOR_5_SECS;
startTime = currentTime;
setPwmLevelForAllLeds(0); //all off
}
}
}
break;
//*****
case ALL_FADE_UP_DOWN_IN_SEQUENCE:
{
static unsigned long startTime;
static int pwmLevel = 255;
static int pwmIncrement = -1;
unsigned long period = 5;
if (currentTime - startTime >= period)
{
analogWrite(ledPins[ledIndex], pwmLevel);
startTime = millis();
pwmLevel += pwmIncrement;
if (pwmLevel <= 0)
{
pwmIncrement *= -1;
pwmLevel += pwmIncrement;
}
if (pwmLevel >= 255)
{
pwmLevel = 255;
analogWrite(ledPins[ledIndex], pwmLevel); //make sure that the LED is off
pwmIncrement *= -1;
ledIndex++;
if (ledIndex >= LEDCOUNT)
{
currentState = DO_NOTHING;
Serial.println("Doing nothing forever");
}
}
break;
}
}
//*****
case DO_NOTHING:
{
break;
}
}
}
void setPwmLevelForAllLeds(byte pwmLevel)
{
for (int ledIndex = 0; ledIndex < LEDCOUNT; ledIndex++)
{
analogWrite(ledPins[ledIndex], pwmLevel);
}
}