2015-10-29 3 views
1

Я работаю с FastLED на фоточастицах частиц в C++ и пытаюсь назначить новое значение одному из элементов массива пикселей.Значения переменных массива 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, но это тоже не имеет никакого эффекта.

Почему это значение не задано в массиве?

+0

Что такое реализация NSFastLED :: CRGB :: operator = (int) '?? Или есть ли ctor 'NSFastLED :: CRGB (int)'? – GreatAndPowerfulOz

+0

https://github.com/FastLED/FastLED/blob/ccf12263ce06218302c7bdcb7879a6e90122266e/pixeltypes.h#L170 –

ответ

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 
+0

Я должен указать, что даже присвоение значения CRGB не работает (либо используя встроенный цвет в FastLED, например CRGB :: Red), и изменение значений r/g/b также, кажется, ничего не делает. –

+0

Если вы просто используете объявление типа int leds [1]; –

+0

Итак, если вы установили светодиоды [0] .r = 1, то напечатайте значение светодиодов [0] .r, это не 1? –

Смежные вопросы