WS2812 постепенное включение светодиодов

Yanki
Offline
Зарегистрирован: 28.04.2016

Добрый день.  В наличии, Arduino, часы реального времени DS3231, и диодная лента WS2812. Идея звключается в том, чтоб в определенное время загорались диоды с каждой стороны с паузой в 1 минуту к примеру. Включать каждый диод по истечении одной минуты, получается не очень красивый код:

    if (jobHour == 9) {
      if (jobMin == 50){
          pixels.setPixelColor(59, pixels.Color(127,127,127)); 
          pixels.setPixelColor(0, pixels.Color(127,127,127)); 
          pixels.show();
      }
      if (jobMin == 51){
          pixels.setPixelColor(58, pixels.Color(127,127,127)); 
          pixels.setPixelColor(1, pixels.Color(127,127,127)); 
          pixels.show();
      }

А вот как сделать циклом For чтоб работа одновременно до меня не доходит, пока выполняется первый цикл, второй ждет т.к. используется delay. Подскажите пожалуйста, как можно заменить delay? Заранее прощу прощения, за боль в глазах за такой ужасный код.)

#define left_led 29
#define right_led 30 

   if (jobHour == 9) {
      if (jobMin == 50){
        for (int i = 0; i < right_led; i ++){
          pixels.setPixelColor(i, pixels.Color(127,127,127)); 
          pixels.show();
          delay (50);
        }
        for (int i = 59; i > left_led; i --){
          pixels.setPixelColor(i, pixels.Color(127,127,127)); 
          pixels.show();
          delay (50);
         }
     }
  }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что, вместо двух циклов записать один Клапуаций запретил?

Вместо

       for (int i = 0; i < right_led; i ++){
          pixels.setPixelColor(i, pixels.Color(127,127,127)); 
          pixels.show();
          delay (50);
        }
        for (int i = 59; i > left_led; i --){
          pixels.setPixelColor(i, pixels.Color(127,127,127)); 
          pixels.show();
          delay (50);
         }

Пишете один цикл

for (int i = 0; i < 30; i ++){
	pixels.setPixelColor(i, pixels.Color(127,127,127)); 
	pixels.setPixelColor(59-i, pixels.Color(127,127,127)); 
	pixels.show();
	delay (50);
}

Нормально будут идти навстречу друг другу и в центре сойдутся.

strayker
Offline
Зарегистрирован: 04.11.2016

Может не в тему ну всё же. немного переделал код и вот что получилось

for (int i = 0; i < 30; i ++)
for (intj= 0; j< 30;j++)
{
    pixels.setPixelColor(i, pixels.Color(j,0,0));
        pixels.show();
    delay (50);
 
}
Приводит к постепенному плавному включению каждого диода. 
А как сделать чтоб после того как плано зажегся первый диод,  добавить к его цвету плавный запуск следующего цвета, а только потом второй диод по тойже схеме?