Arduino不断崩溃

时间:2017-01-03 20:09:21

标签: arduino

我有一个连接了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闪烁黑色并且没有完成蓝色部分。

2 个答案:

答案 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崩溃是因为它找不到足够的电量。

您可以尝试使用外部电源吗?