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 = 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) {...}
你应该通过 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]);
(尽管我在没有看到其余代码的情况下可能在这一点上是错误的。)
我正在为 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 = 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) {...}
你应该通过 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]);
(尽管我在没有看到其余代码的情况下可能在这一点上是错误的。)