我正在为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工作正常。
那么,我需要在哪里以及如何使用指针? 感谢您的帮助!
答案 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]);
(虽然在没有看到其余代码的情况下我可能错了。)