首页 > 解决方案 > 给led随机颜色

问题描述

是否可以为 LED 分配随机颜色?如果两个或多个 LED 具有相同的颜色,这不是问题。

我尝试过这样的事情:尝试为数字分配颜色,并给 LED 一个随机数。代码无法验证,无法将 int 与随机数组合(至少不是我尝试的方式)

randNumber 之后的 CRGB:: 是 FastLED 库的一部分,用于为 LED 提供颜色。在 Fastled 中,您可以为颜色命名。

#include "FastLED.h"
#define NUM_LEDS 10

CRGB leds[NUM_LEDS];

#define DATA_PIN 2

long randNumber;
long randNumber0 = CRGB::Red;
long randNumber1 = CRGB::White;
long randNumber2 = CRGB::Blue;
long randNumber3 = CRGB::Red;
long randNumber4 = CRGB::White;
long randNumber5 = CRGB::Blue;
long randNumber6 = CRGB::Red;
long randNumber7 = CRGB::White;
long randNumber8 = CRGB::Blue;
long randNumber9 = CRGB::Red;

#define INTERVAL_MESSAGE1 5000

unsigned long time_1 = 0;

void setup() {
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);

  Serial.begin(9600);
}

void loop() {

  if (millis() >= time_1 + INTERVAL_MESSAGE1) {
    time_1 += INTERVAL_MESSAGE1;
    leds[0] =  randNumber.random(0,9);
    leds[1] =  randNumber.random(0,9);
    leds[2] =  randNumber.random(0,9);
    leds[3] =  randNumber.random(0,9);
    leds[4] =  randNumber.random(0,9);
    leds[5] =  randNumber.random(0,9);
    leds[6] =  randNumber.random(0,9);
    leds[7] =  randNumber.random(0,9);
    leds[8] =  randNumber.random(0,9);
    leds[9] =  randNumber.random(0,9);
    FastLED.show(55);
  }


}

标签: arduino

解决方案


答案是使用数组并使用随机选择其中的索引。顺便说一句,语言是 C++,所以你可以查看一些教程。

#include "FastLED.h"
#define NUM_LEDS 10

CRGB leds[NUM_LEDS];

#define DATA_PIN 2

long randNumber[10] = {
  CRGB::Red,
  CRGB::White,
  CRGB::Blue,
  CRGB::Red,
  CRGB::White,
  CRGB::Blue,
  CRGB::Red,
  CRGB::White,
  CRGB::Blue,
  CRGB::Red
};

#define INTERVAL_MESSAGE1 5000

unsigned long time_1 = 0;

void setup() {
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);

  Serial.begin(9600);
}

void loop() {

  if (millis() >= time_1 + INTERVAL_MESSAGE1) {
    time_1 += INTERVAL_MESSAGE1;

    for (auto & led : leds) {
      led = randNumber[random(0,10)];
    }
    
    FastLED.show(55);
  }
}

推荐阅读