Значения массива 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
Другие вопросы по тегам