// Sketch for testing switch between loops for LED patterns v4 (remembers mode state)
const byte PinLed = 9;
const byte PinSwitch = 2;
int ledState;
unsigned long M1InitOnTime = 500;
unsigned long M1OnIncrement = 500;
unsigned long M1OnTimeMax = 3000 - M1OnIncrement;
unsigned long M2InitOnTime = 1000;
unsigned long M2OnIncrement = 1000;
unsigned long M2OnTimeMax = 5000 - M2OnIncrement;
const unsigned long MsecLedOff = 3;
unsigned long msecPeriod;
unsigned long msecLst;
unsigned long msec;
unsigned long msecPeriodMin;
unsigned long msecPeriodMax;
unsigned long msecPeriodInc;
enum { On = HIGH, Off = LOW };
// -----------------------------------------------------------------------------
void loop ()
{
if (LOW == digitalRead(PinSwitch)) {
msecPeriodMin = M1InitOnTime;
msecPeriodMax = M1OnTimeMax;
msecPeriodInc = M1OnIncrement;
}
else {
msecPeriodMin = M2InitOnTime;
msecPeriodMax = M2OnTimeMax;
msecPeriodInc = M2OnIncrement;
}
msec = millis ();
if (msec - msecLst >= msecPeriod) {
msecLst = msec;
if (ledState == On) {
ledState = Off;
msecPeriod = MsecLedOff;
}
else {
ledState = On;
msecPeriod += msecPeriodInc;
if (msecPeriodMax <= msecPeriod)
msecPeriod = msecPeriodMin;
}
Serial.println (msecPeriod);
digitalWrite (PinLed, ledState);
}
}
// -----------------------------------------------------------------------------
void setup ()
{
pinMode (PinLed, OUTPUT);
pinMode (PinSwitch, INPUT_PULLUP);
Serial.begin (9600);
}