Как реализовать мигание светодиодом без использования функции delay() в блоке setup() кода?

Как можно организовать мигание светодиода в функции setup() без использования команды delay(), чтобы светодиод моргнул пять раз перед тем, как программа продолжит своё выполнение?
  • 17 декабря 2023 г. 21:26
Ответы на вопрос 2
Для реализации мигания светодиода без использования функции delay() в блоке setup(), можно воспользоваться функцией millis(). 

Пример кода, который моргает светодиодом пять раз в функции setup():

```cpp
const int ledPin = 13;
int ledState = LOW;
unsigned long previousMillis = 0;
unsigned long interval = 500;  // интервал времени между переключениями светодиода

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    digitalWrite(ledPin, ledState);

    static int blinkCount = 0;
    blinkCount++;
    if (blinkCount == 10) {
      // Здесь выполняются остальные действия программы после мигания светодиода
    }
  }
}
```

В данном примере, светодиод мигает с интервалом 500 миллисекунд (полсекунды) между переключениями. После пятого мигания, выполняются остальные действия программы.
1. В setup не получится 
2. Если без delay, то нужно использовать таймеры и прерывания.
Внутри прерывания мигай и увеличивай счётчик, сколько раз мигнул. После 5 раз - выключай прерывание/освобождай таймер.
Если нужно, чтобы пока происходит мигание, не начиналось действие внутри loop - мигай внутри loop, но также закрой его при помощи какого-нибудь условия что-то типа "если пять раз мигнул - работаем, иначе - мигаем и увеличиваем счётчик"
Похожие вопросы