制作 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();
}
}
我想要 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
.
你可以用这样的东西(仍然不是“好看但可能更好一点)
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();
}
}