У меня есть светодиодная лента, и я не уверен, почему свет не выключается сразу. Требуется разъяснение кода

#arduino #led #neopixel

Вопрос:

Я довольно новичок в написании кода Arduino и меня смущает блок кода.

При выполнении синяя точка перемещается вниз по светодиодной полосе и в конечном итоге возвращается к началу.

 #include lt;FastLED.hgt; #define NUM_LEDS 150 #define DATA_PIN 4  CRGB leds[NUM_LEDS];  void setup() {   FastLED.addLedslt;NEOPIXEL, DATA_PINgt;(leds, NUM_LEDS); }  void loop() {  for(int dot = 0; dot lt; NUM_LEDS; dot  ) {   leds[dot] = CRGB::Blue;  FastLED.show();  // clear this led for the next time around the loop  leds[dot] = CRGB::Black;  delay(30);  } }  

Следуя логике пустого цикла…

Мы установили первый светодиод в массиве на синий…
Затем мы говорим полосе включиться с помощью .show()…
Затем мы устанавливаем светодиод на черный… (Вот тут я в замешательстве)
, А затем установите задержку для функции…
Затем функция повторяет переменную точки и продолжает движение вниз по светодиодной полосе.

Моменты путаницы

  1. Когда мы устанавливаем светодиод на черный, мы никогда не запускаем другой метод .show (). Как стриптиз узнает, что нужно переходить на черный цвет?
  2. Когда я устанавливаю задержку на что-то сумасшедшее, например 300000, появляется синий индикатор… ожидает время задержки.. затем выключается, а затем переходит к следующему светодиоду. Поведение, которого я ожидал бы, состояло бы в том, что свет станет синим… затем сразу же станет черным… а затем дождется таймера задержки.. затем перейдите к следующему светодиоду… Я не уверен, как задержка связана с leds[dot] = CRGB::Black; линией.

Ответ №1:

В первом цикле светодиоды[0] станут синими, затем они отобразятся на световой полосе с помощью функции FastLED.show(). Затем он заставит те же светодиоды[0] почернеть, однако это будет отображаться только во второй итерации цикла.

Второй цикл сделает то же самое со светодиодами[1] и так далее.