我有一个连接了WS2812的Arduino,由我的计算机上的USB供电,我正在尝试运行以下代码:
#include <FastLED.h>
#define NUM_LEDS 144
#define DATA_PIN 6
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.show();
}
void loop() {
for(int dot = 0; dot < NUM_LEDS; dot++) {
fill_solid(leds, NUM_LEDS, CRGB::Red);
leds[dot] = CRGB::Black;
leds[dot] = CRGB::Blue;
FastLED.show();
leds[dot] = CRGB::Red;
delay(30);
}
}
void setAll() {
FastLED.show();
}
这样做会将所有LED设置为红色,然后通过每个LED将其关闭,然后再显示为蓝色,然后再返回红色。
出于某种原因,它会获得X个LED然后崩溃。崩溃我的意思是Arduino将自己与计算机断开连接,但Arduino仍然保持亮起,LED灯条仍然通电。
有什么想法吗?这是一个真正的Uno。
另外。如果我将LED插入3.3v引脚,动画效果很好,但LED闪烁黑色并且没有完成蓝色部分。
答案 0 :(得分:1)
我从未使用过NeoPixels,所以我对此并不十分确定,但我非常有信心这些可以解决您的问题。
首先,你的计划。我不认为它正在做你认为它应该做的事情。尝试使用此循环,而不是:
void loop()
{
fill_solid(leds, NUM_LEDS, CRGB::Red);
FastLED.show();
delay(100);
for(int dot = 0; dot < NUM_LEDS; dot++)
{
leds[dot] = CRGB::Black;
FastLED.show();
delay(100);
leds[dot] = CRGB::Blue;
FastLED.show();
delay(100);
leds[dot] = CRGB::Red;
FastLED.show();
delay(100);
}
}
并删除SetAll函数,因为它没用。
尝试使用NUM_LEDS设置为5的此代码,它应该可以正常工作。
现在主要的问题是:你真的使用了由USB供电的144个LED吗?我建议你阅读关于为neopixels供电的this link。特别是声称在全亮度下每个新像素吸收60mA的部分。算一算,144个neopixels最多可以吸收8.64A,所以你需要一个5V 10A的电源为它们供电!当你试图将它们打开时,一个5V为0.5A的USB会自动关闭,从而给你带来奇怪的行为。
降低使用的LED数量(最多7个),或者使用外部电源。而通过外部我并不是说使用arduino上的桶形插孔,而是将一个5V 10A(或更多安培)连接到neopixel strip,然后将地线和数据线连接到arduino(而不是+ 5v)并通过arduino通过usb端口:它应该可以工作。
更新:
根据与作者的聊天,问题确实是电源
答案 1 :(得分:0)
adafruit https://cdn-shop.adafruit.com/datasheets/WS2812.pdf的数据表说你需要一个介于6v和7v之间但USB cannot provide more than 5v的电源,我猜测arduino崩溃是因为它找不到足够的电量。
您可以尝试使用外部电源吗?