Значения массива C ++ не меняются

Я работаю с 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, но это тоже не имеет никакого эффекта.

Почему значение не устанавливается в массиве?

1

Решение

Тип данных вашего массива — 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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]