Adafruit_NeoPixel 对象在数组中使用时的异常行为

Adafruit_NeoPixel objects abnormal behavior when used in an array

我在尝试找出如何遍历 Adafruit_NeoPixel 对象数组时遇到了问题。 但我终究无法弄清楚哪里出了问题。我在 google 上查找了这个问题,并通过 Ardrino 和 stack over flow 我尝试调整代码以适应我看到其他人所做的事情(例如,不是在数组中列出 adafruit_neopixles 对象,而是创建阵列中的 neopixles)让它工作,但我仍然没有运气。

所以这是一个简单的例子:这个脚本应该让前 6 个 LED 灯亮起绿色蓝色

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strips[] = {
  Adafruit_NeoPixel(32, 5, NEO_GRB + NEO_KHZ800),
  Adafruit_NeoPixel(32, 6, NEO_GRB + NEO_KHZ800),
  Adafruit_NeoPixel(32, 7, NEO_GRB + NEO_KHZ800),
};

#define NUMSTRIPS (sizeof(strips)/sizeof(strips[0]))

void setup() {
     //Edit2
         Serial.begin(115200);
     //end Edit2
  
  for(int i=0; i<NUMSTRIPS; i++)
  {
    strips[i].begin();
    strips[i].setBrightness(255); //adjust brightness here
    
    /*This is code that ive added in AFTER i made the orgional post to see if it had any difference   
    */
        for (int j=0; j<10;j++){
          strips[0].setPixelColor(j, 0,100,0);
      }
    
     /* End of edited code
     */
    strips[i].show(); // Initialize all pixels to 'off'
  }
  //Edit2
    Serial.println("Loop end");
  //End Edit2

  //strips[0].begin();
  strips[0].setBrightness(255);
  strips[0].setPixelColor(0, 0,100,255);
  strips[0].setPixelColor(1, 0,100,255);
  strips[0].setPixelColor(2, 0,100,255);
  strips[0].setPixelColor(3, 0,100,255);
  strips[0].setPixelColor(4, 0,100,255);
  strips[0].setPixelColor(5, 0,100,255);
  strips[0].show();
}

然而,这没有任何作用,根本没有 LED 灯亮起。 -为什么!? 然而,当我注释掉 For 循环并取消注释 strips[0].begin 时,它确实有效。 那么这是为什么呢?我有什么不明白的?

编辑:所以我尝试更改我的代码中的一些内容以测试它是否有任何影响 我加入了

    for (int j=0; j<10;j++){
          strips[0].setPixelColor(j, 0,100,0);
      }

它在循环内工作,但现在循环后的任何东西都不再工作。

编辑 2:所以在使用串行后,我发现循环结束时设备正在崩溃。那为什么会这样呢?

编辑 3: 首先,我想对 ocrdu 说抱歉,他们试图编辑这个,但仍然没有完全正确的想法。

其次,我想说问题已经解决了一半,异常行为是由微控制器崩溃引起的,当条带被文盲通过时。至于为什么那还是我需要帮助理解的。

所以我在它崩溃之前完成了 1 个循环所以进展?我接受了 Botje 的建议,我使用 strips[i].numPixels(); 而不是使用固定值

但是我决定再做一些测试,看看我是否已经解决了这个问题,而且它在测试 2 开始之前就崩溃了。这是新代码。

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strips[] = {
  Adafruit_NeoPixel(32, 5, NEO_GRB + NEO_KHZ800),
  Adafruit_NeoPixel(32, 6, NEO_GRB + NEO_KHZ800),
  Adafruit_NeoPixel(32, 7, NEO_GRB + NEO_KHZ800),
};

#define NUMSTRIPS (sizeof(strips)/sizeof(strips[0]))

void setup() {
  Serial.begin(115200);
  
  Serial.println("1st Test Do a loop with out crashing over all the strips");
  for(int i=0; i<NUMSTRIPS; i++)
  {
    strips[i].begin();
    strips[i].setBrightness(255);
    for (int j=0; j<strips[i].numPixels();j++){
          strips[i].setPixelColor(j, 0,100,0);
          Serial.println(j);
      }
    Serial.println("b4 show");
    strips[i].show(); 
  }
  Serial.println("Loop end");
  Serial.println("If you are reading this then the microcontroller did not crash on 1st Test");



  delay(150);



  Serial.println("2nd Test Do a loop with out crashing over 1 strip");
  for (int k=0; k<strips[0].numPixels();k++)
  {
    strips[0].setPixelColor(k, 0,100,255);
    strips[0].show();
    Serial.println(k);
  }
  Serial.println("Loop end");
  Serial.println("If you are reading this then the microcontroller did not crash the 2nd Test");



  delay(150);



  Serial.println("3rd Test Do a loop changing onley 6 pixles on 1 strip with out crashing");
  for (int l=0; l<=5; l++)
  {
    strips[0].setPixelColor(l, 200,0,0);
    strips[0].show();
    Serial.println(l);
  }
  Serial.println("Loop end");
  Serial.println("If you are reading this then the microcontroller did not crash the 3rd Test");
}

所以我已经通过更换 adafruit liabery 和 fastled 不再崩溃或异常行为来解决这个问题。