具有多个 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 &lt; 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 库冲突

Arduino处理STM32中的多个串口通讯问题

Note-01.arduino和74hc595的使用

带有SoftWire(I2C仿真器)库的多个tcs34725 arduino颜色传感器

arduino报错,对应多个库怎么办?

arduino控制板怎么通过SPI连接多个RFID RC522模块啊