2017-06-03 53 views
0

我正在研究一个需要使用具有360个LED的WS2812B LED灯条的项目。我正在使用Adafruit_NeoPixel.h库来驱动LED灯条。我有一门叫灯的课,负责驱动LED。Arduino Adafruit Neonpixel返回0像素

这里是我的代码片段:

//---- in Lights.h 
private: 

    Adafruit_NeoPixel m_LedStrip; 
//---------------------------------------- 

//--- in Lights.cpp 

Lights::Lights() 
{ 
    m_LedStrip = Adafruit_NeoPixel(360, m_LedPin, NEO_GRB + NEO_KHZ800); 

    #if defined (__AVR_ATtiny85__) 
     if (F_CPU == 16000000) clock_prescale_set(clock_div_1); 
    #endif 

    m_LedStrip.begin(); 

    Serial.print("m_LedStrip.numPixels() is "); 
    Serial.println(m_LedStrip.numPixels()); 
} 

//---------------------------------------- 

我的方式上Arduino的纳米工作瓦特/ ATmega328。

现在,m_LedStrips.numPixels()显示它有0像素。奇怪的是,当我把像素的数量设置得更小时,它就可以工作。 360也适用于我的原型代码,只有灯光控制。我怀疑这可能是一个内存问题,但我的Arduino内存还没有满。以下是内存使用情况统计信息。

Program size: 9,186 bytes (used 30% of a 30,720 byte maximum) (1.64 secs) 
Minimum Memory Usage: 928 bytes (45% of a 2048 byte maximum) 

有人可以提供一些建议,我该如何解决这个问题?

回答

0

360个LED,每个像素3个字节,需要1080字节的内存。

Adafruit_NeoPixel库动态分配内存,这就是为什么你在编译期间看不到内存使用情况的原因。

与编译时的928字节一起,它使用了2008字节的内存。最大为2048字节,即使用的内存的98%。而你仍然需要内存来存放堆栈。

您将需要减少其他代码的内存使用量,或者获得更多内存的MCU。