I am trying to enter the if statement inside the void blink () function same as I did when using the blink funcion with delay()
void blink(unsigned long onTime, unsigned long phaseDifference, unsigned long rate,uint16_t repetitions)
{
for (int i = 0; i < repetitions; i++)
{
if (phaseDifference < onTime)
{
digitalWrite(led1, HIGH);
delay(phaseDifference);
digitalWrite(led2, HIGH);
delay(onTime - phaseDifference);
digitalWrite(led1, LOW);
delay(phaseDifference);
digitalWrite(led2, LOW);
delay(rate - (onTime + phaseDifference));
}
else
{
digitalWrite(led1, HIGH);
delay(onTime);
digitalWrite(led1, LOW);
delay(phaseDifference - onTime);
digitalWrite(led2, HIGH);
delay(onTime);
digitalWrite(led2, LOW);
delay(rate - (onTime + phaseDifference));
}
}
}
my try is at the following:
const byte led1 = 2;
const byte led2 = 8;
unsigned long cycleCount = 0;
unsigned long previousMillis = 0;
void blink(unsigned long onTime, unsigned long phaseDifference,unsigned long rate,unsigned long repetitions)
{
if(cycleCount < repetitions)
{
unsigned long timePassed = millis() - previousMillis;
if (timePassed >= rate)
{
previousMillis = millis(); // Start a new cycle
timePassed = 0;
cycleCount++;
}
if (timePassed < onTime)
{
digitalWrite(led1, HIGH);
}
else
{
digitalWrite(led1, LOW);
}
if (timePassed >= phaseDifference && timePassed < (phaseDifference+onTime))
digitalWrite(led2, HIGH);
else
digitalWrite(led2, LOW);
} else
{
cycleCount = 0;
}
}
void setup()
{
Serial.begin(115200);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop()
{
blink(50,0,500,10);
blink(500,50,1000,5);
}
what am I missing?
the two LED are constantly on