Помощь в понимании

itehno
Offline
Зарегистрирован: 18.04.2015

Доброго времени суток. Подскажите, пожалуйста, почему не работает данный код?

Включается только 1 светодиод. Если в цикле не использовать условие, а только dellay, то светодиоды включаются по очереди.

int8_t led1 = 9;
int8_t led2 = 10;
int8_t led3 = 11;
  
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}

void loop() {
  flashing();
}

void flashing(){
  int16_t massiv[] = {led1, led2, led3};
  uint32_t timer = 0;
  int16_t interval = 300;

    for (int8_t i = 0; i <= 2; i++){
       if (millis() - timer > interval){ 
          digitalWrite(massiv[i], HIGH);
          timer = millis();}
    }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

За сколько миллисекунд цикл заканчивается?

itehno
Offline
Зарегистрирован: 18.04.2015

Я не совсем понял вопрос. Мне нужна лишь задержка в цикле на каждой итерации в 300мс

itehno
Offline
Зарегистрирован: 18.04.2015

Вопрос решен: static uint32_t timer = 0;

Но, может кто-то хочет дополнить и высказаться о недостатках или пользе отказа от delay?

b707
Offline
Зарегистрирован: 26.05.2017

itehno пишет:

может кто-то хочет дополнить и высказаться о недостатках или пользе отказа от delay?

имхо, это как раз тот случай, где делай оправдан, а миллис совершенно лишний

Green
Offline
Зарегистрирован: 01.10.2015

Так это до тех пор, пока не захочется что ни будь добавить.