Hi guys, im looking for some help getting the function airStrobe() to be non-blocking. I get the concept but I just carn't seem to get my head around this nested non-blocking code. Below is the original code with delays, and also my attempt at making it non-blocking. Thanks
Code with delays:
void airStrobe(int t) {
static unsigned long previousUpdateTime;
if(millis()-previousUpdateTime > t){
previousUpdateTime = millis();
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[1], HIGH);
delay(50);
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], LOW);
delay(100);
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[1], HIGH);
delay(50);
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], LOW);
delay(10);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[3], HIGH);
delay(50);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[3], LOW);
delay(100);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[3], HIGH);
delay(50);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[3], LOW);
}
}
Attempt at non-blocking code:
const int pinCount = 4;
static unsigned long previousUpdateTime;
void setup() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPins[thisPin], OUTPUT);
}
}
void loop() {
airStrobe(3000);
}
void airStrobe(int t) {
if(millis()-previousUpdateTime > t){
static unsigned long updateDelay;
static unsigned long blinkDelay = millis()-updateDelay; // non-blocking var
if(blinkDelay < 50) {
previousUpdateTime = millis();
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[1], HIGH);
} else if(blinkDelay >= 50 && blinkDelay < 150) { //delay(50);
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], LOW);
} else if(blinkDelay >= 150 && blinkDelay < 200) { //delay(100);
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[1], HIGH);
} else if(blinkDelay >= 200 && blinkDelay < 210) { //delay(50);
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], LOW);
} else if(blinkDelay >= 210 && blinkDelay < 260) { //delay(10);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[3], HIGH);
} else if(blinkDelay >= 260 && blinkDelay < 310) { //delay(50);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[3], LOW);
} else if(blinkDelay >= 310 && blinkDelay < 410) { //delay(100);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[3], HIGH);
} else if(blinkDelay >= 410 && blinkDelay < 460) { //delay(50);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[3], LOW);
} else if(blinkDelay >= 460) {
updateDelay = millis();
}
}
}