【问题标题】:Arduino keeps crashingArduino不断崩溃
【发布时间】:2017-01-03 20:09:21
【问题描述】:

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

【问题讨论】:

  • 不清楚这是一个软件问题。现在没有 Arduino stackexchange 站点吗?在那里试试。

标签: arduino


【解决方案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 吗?我建议你阅读this link 了解如何为neopixels 供电。特别是说明在全亮度下每个新像素消耗 60mA 的部分。算一下,144 个新像素最多消耗 8.64A,所以你需要一个 5V 10A 的电源来为它们供电!当您尝试打开 5V 0.5A 的 USB 时,它们会自行关闭,从而给您带来奇怪的行为。

所以减少您使用的 LED 数量(最多 7 个),或使用外部电源。外部我不是指使用arduino上的桶形插孔,而是将5V 10A(或更多安培)连接到neopixel条,然后将地线和数据线连接到arduino(不是+ 5v)并通过arduino为arduino供电USB 端口:它应该可以工作。

更新:

根据和笔者的聊天,确实是电源的问题

【讨论】:

  • 好的 - 我会试试这个,但是我遇到了一个问题。我有我的 5V 面包板 PSU 并将我的 LED 电源连接到 5V+,然后将我的数据和接地连接到我的 Arduino。 5V 将进入 LED,但它们没有亮起。
  • @K20GH 面包板电源的最大电流是多少?您是否将 PSU 的接地连接到 LED 和 arduino 的接地?您是否发送了打开 LED 的命令?
  • 它是一个 12V 3A PSU。虽然我知道这不足以点亮整个灯带,但我至少希望一些 LED 会亮起。我将其接线如下:PSU 5v -> LED。 PSU GRD -> Arduino GRD。 LED GRD -> Arduino GRD。但是,当我这样做时,我的 PSU 上的 LED 会熄灭,表明某处有短路?
  • @K20GH 是 12V 还是 5V PSU?然后,由于电流很高,我建议您使用较粗的电线并将 PSU 接地直接连接到 LED GND(当您想点亮很多时)。而且...您是否尝试减少点亮的 LED 数量?可能是PSU进入了过流保护,所以干脆关掉输出
  • 插头是一个 12V 3A 的插头,它进入我的面包板 PSU,将其步进至 5V。在 Arduino 上只运行 5 个 LED 就可以正常工作,但在面包板 PSU 上没有任何效果
【解决方案2】:

adafruit https://cdn-shop.adafruit.com/datasheets/WS2812.pdf 的数据表说您需要 6v 和 7v 之间的电源,但 USB cannot provide more than 5v,我猜 arduino 会崩溃,因为它找不到足够的电源。

可以试试外接电源吗?

【讨论】:

  • 我认为这不是电源问题。我可以连续数小时运行任何 FastLED 或 NeoPixel 演示,没有任何问题。另外 - 我的 LED 需要 5v
猜你喜欢
  • 2012-09-03
  • 2015-08-08
  • 2018-05-24
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2015-11-11
相关资源
最近更新 更多