Язык C++. Замена delay на millis

Вопрос от новичка. Как в этом коде delay заменить на millis? Чтобы не ставить на паузу выполнение остального кода программы.

Последовательность зажигания диода в этом алгоритме срабатывает разово, а не зациклена.

digitalWrite(ledblue, HIGH);
delay(200);
digitalWrite(ledblue, LOW);
delay(100);
digitalWrite(ledblue, HIGH);
delay(100);
digitalWrite(ledblue, LOW);
delay(100);
digitalWrite(ledblue, HIGH);
delay(100);
digitalWrite(ledblue, LOW);
delay(100);
digitalWrite(ledblue, HIGH);
delay(2000);
digitalWrite(ledblue, LOW);

Ответы (1 шт):

Автор решения: Vanyamba Electronics

Это делается с помощью машины состояний.

int timeouts[] = { 200, 100, 100, 100, 100, 100, 2000, 0 };
int nstate = 0;
int start = 0;
bool high = true;

void setup()
{
    start = millis();
    digitalWrite(ledblue, HIGH);
}

void loop()
{
    if (timeouts[nstate] != 0) {
        if (millis() - start >= timeouts[nstate]) {
            start = millis();
            if (high)
                digitalWrite(ledblue, LOW);
            else
                digitalWrite(ledblue, HIGH);
            high = !high;
            nstate++;
        }
    }
}
→ Ссылка