具有多个 NeoPixels 的 Arduino Sketch(采用不同 NeoPixels 的功能)
Posted
技术标签:
【中文标题】具有多个 NeoPixels 的 Arduino Sketch(采用不同 NeoPixels 的功能)【英文标题】:Arduino Sketch with multiple NeoPixels (function taking different NeoPixels) 【发布时间】:2016-12-31 20:02:08 【问题描述】:我正在为 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 灯条, 我想问题出在指针上。该功能根本无法像这样工作,我无法让它工作。 如果我在没有条带数组的情况下进行测试,整个程序都可以正常工作。
那么,我需要在哪里以及如何使用指针? 提前感谢您的帮助!
【问题讨论】:
Arduino 不是 C。您应该更详细地说明根本不起作用:什么起作用?什么没有?您尝试了什么? -- 事实上,您只能猜测您的项目中可能出现的问题。 守卫i < 1
是在错误代码中还是在工作代码中?
【参考方案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) ...
你应该通过 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]);
(虽然我可能在没有看到其余代码的情况下错了。)
【讨论】:
非常感谢,我想当我再次更频繁地使用指针时,我会更自如地使用指针!以上是关于具有多个 NeoPixels 的 Arduino Sketch(采用不同 NeoPixels 的功能)的主要内容,如果未能解决你的问题,请参考以下文章
ESP8266 Timer1 与 Neopixels WS2812 库冲突