I just tried to rewite it using millis()
here how I did it:
const byte led1 = 2;
const byte led2 = 8;
unsigned long previousMillis = 0;
void blink(unsigned long onTime, unsigned long phaseDifference,unsigned long rate)
{
if(phaseDifference < onTime)
{
digitalWrite(led1, HIGH);
if(millis() - previousMillis > phaseDifference)
digitalWrite(led2, HIGH);
if(millis() > (onTime - phaseDifference))
previousMillis = millis();
digitalWrite(led1, LOW);
if(millis() - previousMillis > phaseDifference)
digitalWrite(led2, LOW);
if(millis()- previousMillis > rate - (onTime + phaseDifference))
{
previousMillis = millis();
}
}
else
{
digitalWrite(led1, HIGH);
if(millis() > previousMillis +onTime)
{
digitalWrite(led1, LOW);
previousMillis = millis();
}
if(millis() - previousMillis > (phaseDifference - onTime))
{
digitalWrite(led2, HIGH);
previousMillis = millis();
}
if(millis() > previousMillis +onTime)
{
digitalWrite(led2, LOW);
}
if(millis() - previousMillis > rate - (onTime + phaseDifference))
{
previousMillis = millis();
}
}
}
void setup() {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop() {
blink(50,0,400);
}
not working at all.
I probably made a mistake somewhere when changing prevoiusMillis all the time.
edit: I forgot to setup the pins OUTPUTs but that was not my mistake.
now the two LED are constantly ON.
make sense.