Я работаю с FastLED над фотоном частиц в C ++ и пытаюсь присвоить новое значение одному из элементов массива пикселей.
По сути, у меня есть массив, объявленный так:
NSFastLED::CRGB leds[1];
Я передаю это в «анимационный» класс, который я написал для изменения значений светодиодов:
void SomeClass::loop()
{
// Get the pointer to the current animation from a vector
Animation *currentAnim = animations.at(currentAnimation);
currentAnim->animate(leds);
...
}
В анимации я пытаюсь сделать что-то действительно простое — установить элемент этого светодиодного массива на какое-то значение. Для тестирования, даже установив его в статическое целое число «0» было бы хорошо.
void MyAnimation::animate(NSFastLED::CRGB *leds)
{
for(int i = 0; i < numLeds; i++)
{
Serial.print(leds[i]); // "1"
leds[i] = 0;
Serial.print(leds[i]); // "1"}
}
Проблема в том, что элемент массива не устанавливается вообще. Как вы можете видеть, это даже внутри класса анимации, что у меня проблема. Я также пытался использовать (leds*)[i] = 0
, но это тоже не имеет никакого эффекта.
Почему значение не устанавливается в массиве?
Тип данных вашего массива — NSFastLED :: CRGB, он содержит значения RGB и может быть назначен, как показано ниже (из https://github.com/FastLED/FastLED/wiki/Pixel-reference )
Если вы просто хотите сохранить число, вы можете использовать int вместо NSFastLED :: CRGB.
// The three color channel values can be referred to as "red", "green", and "blue"...
leds[i].red = 50;
leds[i].green = 100;
leds[i].blue = 150;
// ...or, using the shorter synonyms "r", "g", and "b"...
leds[i].r = 50;
leds[i].g = 100;
leds[i].b = 150;// ...or as members of a three-element array:
leds[i][0] = 50; // red
leds[i][1] = 100; // green
leds[i][2] = 150; // blue
Других решений пока нет …