带有多个Neopixels的Arduino草图(功能采用不同的NeoPixels)

Arduino Sketch with multiple NeoPixels (function taking different NeoPixels)

本文关键字:NeoPixels 功能 草图 Neopixels Arduino      更新时间:2023-10-16

我正在为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可以正常工作。

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

执行此操作

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]);

(尽管我可能在此不看到其余代码的情况下错了。)