Язык 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++;
}
}
}