2017-06-03 43 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。