制作 10 个 LED 灯块

Make blocks of 10 LEDs

我想要 10 个红色的 LED 和接下来的 10 个白色的 LED,重复直到我到达 LED 灯串的末端。

这是最糟糕的代码,但它有效。

正确的做法是什么? 一定很简单,就是想不通

void Brabant() {
  for (int i = 0; i < NUM_LEDS; i = i + 20) {
    if (i < NUM_LEDS) {
      leds[i] = CRGB::Red;
      leds[i + 1] = CRGB::Red;
      leds[i + 2] = CRGB::Red;
      leds[i + 3] = CRGB::Red;
      leds[i + 4] = CRGB::Red;
      leds[i + 5] = CRGB::Red;
      leds[i + 6] = CRGB::Red;
      leds[i + 7] = CRGB::Red;
      leds[i + 8] = CRGB::Red;
      leds[i + 9] = CRGB::Red;
      FastLED.show();
    }
  }
  for (int i = 10; i < NUM_LEDS; i = i + 20) {
    if (i < NUM_LEDS) {
      leds[i] = CRGB::White;
      leds[i + 1] = CRGB::White;
      leds[i + 2] = CRGB::White;
      leds[i + 3] = CRGB::White;
      leds[i + 4] = CRGB::White;
      leds[i + 5] = CRGB::White;
      leds[i + 6] = CRGB::White;
      leds[i + 7] = CRGB::White;
      leds[i + 8] = CRGB::White;
      leds[i + 9] = CRGB::White;
      FastLED.show();
    }
  }
}

您可以替换:

leds[i] = CRGB::White;
leds[i + 1] = CRGB::White;
leds[i + 2] = CRGB::White;
leds[i + 3] = CRGB::White;
leds[i + 4] = CRGB::White;
leds[i + 5] = CRGB::White;
leds[i + 6] = CRGB::White;
leds[i + 7] = CRGB::White;
leds[i + 8] = CRGB::White;
leds[i + 9] = CRGB::White;

与:

for (int j = 0; j < 10; j++) {
  leds[i + j] = CRGB::White;
}

另外,你需要把你的i < NUM_LEDS换成更安全的东西;之后的循环可能会超出 i 并因此超出 NUM_LEDS.

10 个 LED

你可以用这样的东西(仍然不是“好看但可能更好一点)

for (int i = 0; i < NUM_LEDS; i = i + 20) {
    if (i < NUM_LEDS) {
        for (int a = 0; a < 10; a++) {
            leds[i+a] = CRGB::Red;
        }

        FastLED.show();
    }
}
for (int i = 10; i < NUM_LEDS; i = i + 20) {
    if (i < NUM_LEDS) {
        for (int a = 0; a < 10; a++) {
            leds[i+a] = CRGB::White;
        }
        FastLED.show();
    }
}

确保 leds[i+a] 永远不会超过 leds 数组的长度

也许这样的事情也行(但不确定,我不知道 FastLED 库)

for (int i = 0; i < (NUM_LEDS-20); i = i + 20) { //(NUM_LEDS-20) so that i+a+10 never gets bigger than NUM_LEDS
    if (i < NUM_LEDS) {
        for (int a = 0; a < 10; a++) {
            leds[i+a] = CRGB::Red;
            leds[i+a+10] = CRGB::White;
        }

        FastLED.show();
    }
}