带有多个NeoPixels的Arduino Sketch(功能采用不同的NeoPixels)

时间:2016-12-31 20:02:08

标签: c++ arduino microcontroller

我正在为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灯条,功能本身就可以工作 我猜问题是关于指针。该功能根本不能像这样工作,我无法让它工作。 如果我在没有条带阵列的情况下进行测试,整个prorgram工作正常。

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

1 个答案:

答案 0 :(得分:1)

当你这样做时

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 = 28 Adafruit_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) {...}

你应该通过引用

传递它
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]);

(虽然在没有看到其余代码的情况下我可能错了。)