0

我正在做一个项目,我需要使用具有 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());
}

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

顺便说一句,我正在研究带有 ATmega328 的 Arduino Nano。

现在,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)

有人可以就如何解决此问题提供一些建议吗?

4

1 回答 1

0

每个像素 3 个字节的 360 个 LED 占用 1080 个字节的内存。

Adafruit_NeoPixel 库动态分配内存,这就是为什么您在编译时看不到内存使用情况。

连同编译时的 928 字节,它使用 2008 字节的内存。最大为 2048 字节,即已使用内存的 98%。而且您仍然需要堆栈内存。

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

于 2017-06-05T12:44:08.373 回答