У меня есть arduino, использующий fastLED с полосой из 600 огней ws2812b. Я запускаю следующий код:
#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 для управления светом и внешним источником питания.