Use a state machine instead:
bool flashing;
unsigned long lastflashingChange;
void loop() {
unsigned long currentMillis = millis;
if(flashing){
flash(); //update flash state and change IO pin
if (lastflashingChange - currentMillis >= awake_interval) { //awake_interval = 250 ms
flahsing = false;
//turn off the led
lastflashingChange = currentMillis;
}
} else {
if (lastflashingChange - currentMillis >= sleep_interval) { //awake_interval = 250 ms
flashing = true;
//possible initialize flash state
lastflashingChange = currentMillis;
}
}
previousMillis = millis();
}
And a similar bit of code inside flash()
bool flashOn;
unsigned long lastFlashLightChange;
void flash() {
unsigned long x = millis();
if(flashOn){
if (lastFlashLightChange - x >= t1) {
flashOn = false;
lights_off();
lastFlashLightChange = currentMillis;
}
} else {
if (lastFlashLightChange - x >= t2) {
flashOn = true;
lights_on();
lastFlashLightChange = currentMillis;
}
}
}