我有一个 LED 灯带,但不确定为什么灯没有立即关闭。需要代码说明

I have a LED Light strip and am not sure why the light isnt turning off immediately. Need code clarification

我在编写 Arduino 代码方面相当陌生,对一段代码感到困惑。

执行时,一个蓝点会沿着 LED 灯条移动并最终循环回到起点。

#include <FastLED.h>
#define NUM_LEDS 150
#define DATA_PIN 4

CRGB leds[NUM_LEDS];

void setup() { 
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
}

void loop() {
  for(int dot = 0; dot < 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);
  }
}

遵循无效循环逻辑...


我们将阵列中的第一个 LED 设置为蓝色……
然后我们告诉条带打开 .show()...
然后我们将 LED 设置为黑色......(这是我感到困惑的地方)
然后在函数上设置延迟...
然后函数迭代点变量并继续沿着 LED 灯条向下移动。

混淆点

  1. 当我们将 LED 设置为黑色时,我们永远不会 运行 另一个 .show() 方法。条带怎么知道变黑?
  2. 当我将延迟设置为 300000 之类的疯狂值时,蓝灯出现...等待延迟时间..然后关闭,然后迭代到下一个 LED。我期望的行为是灯变蓝……然后立即变黑……然后等待延迟计时器……然后迭代到下一个 LED……我不确定延迟如何与 leds[dot] = CRGB::Black; 行关联。

第一个循环会让leds[0]变成蓝色,然后用FastLED.show()显示在灯条上。接下来它将使相同的 leds[0] 变黑,但是它只会在循环的第二次迭代中显示它。

第二个循环将对 leds[1] 执行相同的操作,依此类推。