我有一个使用带有 600 个 ws2812b 灯条的 fastLED 的 arduino。我正在运行以下代码:
#include "FastLED.h"
#define DATA_PIN 5 // change to your data pin
#define COLOR_ORDER GRB // if colors are mismatched; change this
#define NUM_LEDS 600 // change to the number of LEDs in your strip
#define BRIGHTNESS 32
#define WRAP_NUM 55
#define LED_TYPE WS2812B
CRGB leds[NUM_LEDS];
int startIndex=0;
int bottom=1;
void setup()
{
delay(3000);
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
}
void loop()
{
shapeTwirl();
}
void shapeTwirl()
{
FastLED.clear();
static int heart[]={bottom*WRAP_NUM};
for(int i=0;i<sizeof(heart);i++)
{
leds[(heart[i]+startIndex)]=CRGB::Red;
}
FastLED.show();
delay(70);
startIndex=(startIndex+1)%WRAP_NUM;
}
我的灯围成一个圆圈,这使得一个红点环绕着圆圈。然而,大约 100 光之外的一个蓝点也会旋转。我的代码中没有任何东西可以发出蓝光。我已经追踪到使用
int bottom=1;
如果我用代码中的数字替换底部,我会摆脱蓝点并且它可以正常工作。如果我#define bottom 1;,问题也解决了。我将底部定义在现在的位置还是在 shapeTwirl 中并不重要。这使我相信将变量用于底部有问题,但我尝试使用 int、static int、unsigned int 无济于事。
为什么会打开错误的灯?
我正在使用 arduino uno 来控制灯光和外部电源为它们供电。