Led chaser цветовой эффект заливки

Пожалуйста, помогите. Я много узнаю об Arduino. Почти все в молниях. Я новичок. Я играю с nano и LED ws2812 и использую библиотеку fastled.

То, что я прошу, - это сделать эффект, подобный эффекту заполнения. Например, с помощью сканера/охотника Ларсона.

for (int i = 0; i<NUM_LEDS; i++)
{
  leds[i]=CRGB::Red;
  FastLED.show();
  leds[i]=CRGB::Black;
  delay(50);
}

Исходя из приведенного выше кода, как сделать так, чтобы светодиод останавливался и загорался, а затем снова зацикливался, останавливался и загорался. Я хочу, чтобы каждый светодиод останавливал загорающийся светодиод, даже если цикл светодиода начинался снова с первого светодиода. Это примерно так:

10000 01000 00100 00010 00001 10001 01001 00101 00011 10011 01011 00111 10111 01111 11111

, 👍3

Обсуждение

я не вижу никакого "кода выше", @jsotola

Там есть код - я отредактировал его, чтобы он выглядел лучше / виден., @st2000

Я действительно не понимаю вашего описания проблемы. Кажется, что английский не является вашим родным языком. Может быть, вы можете написать лучшее описание или попросить кого-то помочь вам с этим. Мы должны понять проблему, чтобы иметь возможность помочь вам., @chrisl

Согласитесь w/@chrisl, в посте нет "У меня эта проблема". Предполагая, что вы не видите горящий светодиод, перемещающийся по линии светодиодов, попробуйте поменять местами строку кода "задержка" с линией над ней., @st2000

да вы правы, я не родной английский,я Индонезия.. извините за мой плохой английский и неправильное название.. :).. но спасибо всем за совет.. у меня уже есть ответ от @michel keijzers.., @Nitta Devy


1 ответ


1

Для этого вам нужны два счетчика: один для отслеживания того, насколько заполнена светодиодная панель, и один о текущем "работающем" светодиоде, чтобы в конечном итоге "коснуться" светодиодов, которые уже перемещены вправо.

Каждый светодиод (текущий) будет работать с индекса 0 до последнего заполненного индекса, в то время как последний заполненный индекс уменьшается на 1 после каждого цикла.

(примечание: я не проверял код).

// Заполняйте справа, таким образом, считайте в обратном порядке.
for (int filledLedIndex = NUM_LEDS; filledLed >= 0; filledLed--)
{
   //Теперь пусть индикатор работает от 0 до filedLedIndex;
   for (int currentLed = 0; currentLed < filledLedIndex)
   {
      // Сделать предыдущий светодиод черным
      if (currentLed > 0)
      {
         leds[i - 1] = CRGB::Black;
      }

      // Сделайте текущий светодиод красным
      leds[i] = CRGB::Red;

      // Показать.
      FastLED.show();
      delay(50);
   }
}

// Очистите все светодиоды.
for (int led = 0; led < NUM_LEDS; led++)
{
    leds[i] = CRGB::Black;
}

FastLED.show();
delay(50);
,

большое вам спасибо.. за ваш совет и небольшое редактирование для моего проекта, и он, наконец, работает нормально.., @Nitta Devy

но как написать правильный код для [кода] для (int i = 0; i > y; И я < x; i++) [/код], @Nitta Devy