Arduino Sketch with multiple NeoPixels (功能采用不同的 NeoPixels)

Arduino Sketch with multiple NeoPixels (function taking different NeoPixels)

我正在为 arduino 构建一个均衡器,因此我正在用 c 编写代码,我遇到了以下问题,这很容易解决,但我找不到解决方案,因为我找到了现在用 c 编写的代码不多。 所以这就是我想要做的:

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(21, LEFT_BAND_1, NEO_GRB + NEO_KHZ800);
   ...
Adafruit_NeoPixel strip14 = Adafruit_NeoPixel(21, RIGHT_BAND_7, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel strips[14] = {strip1,strip2,strip3,strip4,strip5,strip6,strip7,strip8,strip9,strip10,strip11,strip12,strip13,strip14};

现在我有一个接受以下参数的函数:

void set_band_ledx(Adafruit_NeoPixel stripx,uint32_t color, float value,float value_old) {...}

我想使用这样的功能:

  for(int i = 0;i<1;i++){
  set_band_ledx(strips[i],strip[i].Color(c1, c2, c3), value_l[i],value_l_old[i]);
  }

如果我只将它用于一个 LED 灯条,该功能本身就可以使用, 我想问题出在指针上。该功能根本无法像这样工作,我无法使其正常工作。 如果我在没有条带数组的情况下测试它,整个程序工作正常。

那么,我需要在哪里以及如何使用指针? 提前感谢您的帮助!

当你这样做时

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(21, LEFT_BAND_1, NEO_GRB + NEO_KHZ800);
   ...
Adafruit_NeoPixel strip14 = Adafruit_NeoPixel(21, RIGHT_BAND_7, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel strips[14] = {strip1,strip2,strip3,strip4,strip5,strip6,strip7,strip8,strip9,strip10,strip11,strip12,strip13,strip14};

你占用的内存相当于2 * 14 = 28Adafruit_NeoPixel的内存,而不是需要的14.

这样会更好:

Adafruit_NeoPixel strips[14] = {
    Adafruit_NeoPixel(21, LEFT_BAND_1, NEO_GRB + NEO_KHZ800),
    ...
    Adafruit_NeoPixel(21, RIGHT_BAND_7, NEO_GRB + NEO_KHZ800)
}

而不是按值

传递 stripx
void set_band_ledx(Adafruit_NeoPixel stripx, uint32_t color, float value, float value_old) {...}

你应该通过 reference

传递它
void set_band_ledx(Adafruit_NeoPixel &stripx, uint32_t color, float value, float value_old) {...}

此外,似乎没有任何理由将 uint32_t color 作为单独的参数传递,因为显然它存储在 stripx 实例中:

  set_band_ledx(strips[i],strip[i].Color(c1, c2, c3), value_l[i],value_l_old[i]);

(尽管我在没有看到其余代码的情况下可能在这一点上是错误的。)