使用多个NeoPixels的Arduino Sketch(接受不同的NeoPixels参数)

3
我正在为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语言。你应该更详细地说明“does simply not work”:什么起作用?什么不起作用?你尝试了什么?目前只能猜测你的项目可能出了什么问题。“i < 1”的保护代码是有问题的还是正常工作的? - Patrick Trentin
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 = 28Adafruit_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]);

(虽然我没有看到代码的其余部分,所以可能是错误的。)

非常感谢,我想当我再经常使用指针时,我会更加熟悉它! - Th3Fi3nD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接