@blackgrom

Как поменять данную конструкцию на millis()?

for (int i = 0; i < 7; i++) {
    for (int n = 0; n < PIXELS_DIGITS; n++){ 
      writeSeg(n, 5);
  }
    strip.show();
    delay(100);
     for (int n = 0; n < PIXELS_DIGITS; n++){ 
      writeSeg(n, 0);
  }
    strip.show();
    delay(100);
     for (int n = 0; n < PIXELS_DIGITS; n++){ 
      writeSeg(n, 2);
  }
    strip.show();
    delay(100);
     for (int n = 0; n < PIXELS_DIGITS; n++){ 
      writeSeg(n, 0);
  }
    strip.show();
    delay(100);
     for (int n = 0; n < PIXELS_DIGITS; n++){ 
      writeSeg(n, 5);
  }
    strip.show();
    delay(100);
  }

из адресной ленты ws2812 построены большие 7 сегментные дисплеи, в этом коде пройсходит анимация то есть включаеться и выключается разные сегменты через 100 миллисекунд, как видно из кода сначала включаеться 5 сегмент потом 0 потом 2 потом снова 0 и потом 2 и снова 5(в функций writeSeg(int n, int seg ) где seg это номер сегмента). переключенте идет через 100миллисекунд с помощью функциий delay и теперь вопрос как заменить его на millis()?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
@evgeniy_lm
Не совсем понимаю зачем это нужно, но примерно так:

unsigned long t;
........................................
// вместо delay(100);
t = millis()+100;
while (t < millis());
.......................................

В принципе этот код абсолютно идентичен delay, только размер исполняемого файла будет больше, т.к. delay работает точно так же, но код более компактный.

Вообще весь ваш код пишется более компактно:

char x[5] = {5, 0, 2, 0, 5};
for (int i = 0; i < 7; i++)
{
for (int k = 0; k < 5; k++)
{
for (int n = 0; n < PIXELS_DIGITS; n++)
{
writeSeg(n, x[k]);
}
strip.show();
delay(100);
}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kalapanga
Для начала повторяющиеся куски кода (зажигание одного сегмента ленты) сделать функцией, номер сегмента - параметр. Тогда в программе останется всего один delay. А его уже менять по прописи BlinkWithoutDelay.
Точнее, нюнсы реализации уже надо в целом с остальной программой смотреть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы