class Blinker
{
protected:
const byte ledPin;
const unsigned long hellPhase;
const unsigned long dunkelPhase;
unsigned long zeitMerker = 0;
void *sprungZiel = 0; // zustandsmerker
public:
Blinker(const byte ledPin,const unsigned long hellPhase,const unsigned long dunkelPhase): ledPin(ledPin),hellPhase(hellPhase),dunkelPhase(dunkelPhase){}
void run(const bool blinkAnforderung)
{
if(!sprungZiel) sprungZiel = &&Start;
goto *sprungZiel;
Start:
if(!blinkAnforderung) return;
digitalWrite(ledPin,HIGH);
sprungZiel = &&HellPhase;
zeitMerker = millis();
HellPhase:
if(millis()-zeitMerker<hellPhase) return;
digitalWrite(ledPin,LOW);
sprungZiel = &&DunkelPhase;
zeitMerker = millis();
DunkelPhase:
if(millis()-zeitMerker<dunkelPhase) return;
sprungZiel = 0;
}
void init()
{
pinMode(ledPin,OUTPUT);
}
};
const byte taster = 2;
Blinker blinkGruppe[] = { // {pin,hellzeit,dunkelzeit}
{13,100, 500},
{12,500,1000},
};
void setup()
{
pinMode(taster,INPUT_PULLUP);
for(Blinker &blinker:blinkGruppe) blinker.init();
}
void loop()
{
bool blinkAnforderung = !digitalRead(taster);
for(Blinker &blinker:blinkGruppe) blinker.run(blinkAnforderung);
}
Ist das: "Mit Kanonen auf Spatzen schießen?"
Vielleicht...
Aber, ich kann durchnummerierte Variablen nicht leiden!
Kann sie nicht leiden........
Bekomme schon fast körperliche Schmerzen, wenn ich sie sehe.