1

C++ の Particle Photon で FastLED を使用しており、ピクセル配列の要素の 1 つに新しい値を割り当てようとしています。

基本的に、次のように宣言された配列があります。

NSFastLED::CRGB leds[1];

LED の値を変更するために、これを作成した「アニメーション」クラスに渡します。

void SomeClass::loop()
{
  // Get the pointer to the current animation from a vector
  Animation *currentAnim = animations.at(currentAnimation);
  currentAnim->animate(leds);

  ...
}

アニメーションでは、非常に単純なことをしようとしています - その LED 配列の要素を何らかの値に設定します。テストでは、静的整数「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たが、それも効果がありません。

値が配列に設定されていないのはなぜですか?

4

1 に答える 1

1

配列のデータ型は NSFastLED::CRGB です。これは RGB 値を保持し、以下のように割り当てることができます ( https://github.com/FastLED/FastLED/wiki/Pixel-referenceから) 。

数値を格納するだけの場合は、NSFastLED::CRGB の代わりに int を使用できます。

// 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
于 2015-10-29T02:04:30.343 に答える