Arduino Adafruit Neonpixel返回0像素

时间:2017-06-03 02:39:38

标签: arduino arduino-uno adafruit

我正在开展一个项目,我需要使用具有360个LED的WS2812B LED灯条。我正在使用Adafruit_NeoPixel.h库驱动LED灯条。我有一个叫做灯的类,负责驱动LED。

以下是我的代码片段:

//---- 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 Nano w / 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)

有人可以就如何解决这个问题提出一些建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

在编译时与928字节一起使用,它使用2008字节的内存。在2048字节是最大值,这是你使用的内存的98%。你仍然需要堆栈的内存。

您需要减少其他代码的内存使用量,或者让MCU拥有更多内存。