#include"FastLED.h" #define NUM_LEDS 42 #define DATA_PIN 3 #define LED_TYPE WS2812 #define COLOR_ORDER GRB int value = 5; //起始亮度 int deltaHue = 230; //相邻灯珠色差 //uint8_t max_bright = value; CRGB leds[NUM_LEDS]; void setup(){ pinMode(DATA_PIN,OUTPUT); LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); //FastLED.setBrightness(max_bright); Serial.begin(115200); } void loop(){ for(; value < 50; value++){ FastLED.setBrightness(value); fill_rainbow(leds, 42, 10, deltaHue); FastLED.show(); Serial.println(value); delay(50); } for(; value > 5; value--){ FastLED.setBrightness(value); fill_rainbow(leds, 42, 10, deltaHue); FastLED.show(); Serial.println(value); delay(50); } delay(100); }
时间: 2024-04-06 09:33:10 浏览: 17
这段代码使用FastLED库控制一个WS2812类型的LED灯带。它定义了一些常量,如LED数量、数据引脚、颜色类型和颜色顺序。它还定义了一些变量,如起始亮度和相邻灯珠色差,以及一个CRGB数组`leds`,用于存储颜色数据。
在`setup()`函数中,它设置了数据引脚为输出模式,并将`leds`数组作为参数传递给`LEDS.addLeds()`函数,以告诉FastLED库如何控制LED灯带。此外,它还启动了串口通信,以便我们可以在串口监视器中查看调试信息。
在`loop()`函数中,它使用`for`循环逐渐增加亮度,然后逐渐减小亮度,以模拟呼吸灯效果。在每个循环中,它使用`FastLED.setBrightness()`函数设置LED灯带的亮度,使用`fill_rainbow()`函数填充颜色,然后使用`FastLED.show()`函数将颜色数据发送到LED灯带。它还使用`Serial.println()`函数将当前亮度值打印到串口监视器中,以便我们可以检查它是否按预期工作。最后,它使用`delay()`函数暂停一段时间,以控制呼吸灯效果的速度。
相关问题
#include <FastLED.h> #define LED_PIN 3 #define LED_COUNT 42 #define BRIGHTNESS 255 #define LED_TYPE WS2812B #define COLOR_ORDER GRB CRGB leds[LED_COUNT]; void setup() { FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, LED_COUNT); FastLED.setBrightness(BRIGHTNESS); }增加另一条灯带
您可以使用以下步骤来添加另一条灯带:
1.确定您将使用的灯带的数量和类型,以及它们所需的引脚。
2.在您的代码中定义第二个灯带的LED数量和引脚,以及要用于该灯带的FastLED控制器。例如:
```
#define LED_PIN_1 3
#define LED_COUNT_1 42
#define LED_PIN_2 5
#define LED_COUNT_2 30
CRGB leds_1[LED_COUNT_1];
CRGB leds_2[LED_COUNT_2];
FastLED.addLeds<LED_TYPE, LED_PIN_1, COLOR_ORDER>(leds_1, LED_COUNT_1);
FastLED.addLeds<LED_TYPE, LED_PIN_2, COLOR_ORDER>(leds_2, LED_COUNT_2);
```
3.编写代码以控制两个灯带。您可以使用类似以下代码的函数来控制每个灯带:
```
void setLeds1Color(CRGB color) {
// Set the color of the LEDs in the first strip
for (int i = 0; i < LED_COUNT_1; i++) {
leds_1[i] = color;
}
// Show the updated colors on the LEDs
FastLED.show();
}
void setLeds2Color(CRGB color) {
// Set the color of the LEDs in the second strip
for (int i = 0; i < LED_COUNT_2; i++) {
leds_2[i] = color;
}
// Show the updated colors on the LEDs
FastLED.show();
}
```
4.在您的主循环中,调用这些函数以更改灯带的颜色:
```
void loop() {
// Set the color of the first strip to red
setLeds1Color(CRGB::Red);
// Wait for 1 second
delay(1000);
// Set the color of the second strip to blue
setLeds2Color(CRGB::Blue);
// Wait for 1 second
delay(1000);
}
```
这将使第一条灯带变为红色,第二条灯带变为蓝色,然后重复此过程。您可以根据需要更改颜色和时间间隔。
#include <FastLED.h> #define LED_PIN_1 3 #define LED_PIN_2 6 #define LED_COUNT_1 53 #define LED_COUNT_2 7 #define BRIGHTNESS 255 #define LED_TYPE WS2812B #define COLOR_ORDER GRB CRGB leds_1[LED_COUNT_1]; CRGB leds_2[LED_COUNT_2]; void setup() { FastLED.addLeds<LED_TYPE, LED_PIN_1, COLOR_ORDER>(leds_1, LED_COUNT_1); FastLED.addLeds<LED_TYPE, LED_PIN_2, COLOR_ORDER>(leds_2, LED_COUNT_2); FastLED.setBrightness(BRIGHTNESS); } void loop() { int brightness_2 = 0; int fadeAmount = 5; for (int i = 0; i < 7680; i++) { int brightness_1 = (exp(sin(i / 50.0 * PI)) - 0.36787944) * 108.0; for (int j = 0; j < LED_COUNT_1; j++) { leds_1[j].setRGB(0, brightness_1, 0); } FastLED.show(); delay(20); } }增加流水效果,慢一点的
可以尝试在循环内部增加一个流水灯效果的代码,实现方法如下:
1. 在循环内部增加一个变量 offset,用于控制流水灯效果的移动速度。
2. 在循环内部增加一个 for 循环,用于控制流水灯效果的起始位置。
3. 在 for 循环内部,将 LED 数组中的每个灯的颜色设置为相邻灯的颜色,实现流水灯效果。
4. 在循环结束后,将 offset 增加一个较小的值,控制流水灯效果的速度。
修改后的代码如下所示:
#include <FastLED.h>
#define LED_PIN_1 3
#define LED_PIN_2 6
#define LED_COUNT_1 53
#define LED_COUNT_2 7
#define BRIGHTNESS 255
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds_1[LED_COUNT_1];
CRGB leds_2[LED_COUNT_2];
void setup() {
FastLED.addLeds<LED_TYPE, LED_PIN_1, COLOR_ORDER>(leds_1, LED_COUNT_1);
FastLED.addLeds<LED_TYPE, LED_PIN_2, COLOR_ORDER>(leds_2, LED_COUNT_2);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
int brightness_2 = 0;
int fadeAmount = 5;
int offset = 0;
for (int i = 0; i < 7680; i++) {
int brightness_1 = (exp(sin(i / 50.0 * PI)) - 0.36787944) * 108.0;
for (int j = 0; j < LED_COUNT_1; j++) {
leds_1[j].setRGB(0, brightness_1, 0);
}
for (int j = 0; j < LED_COUNT_1; j++) {
int index = (j + offset) % LED_COUNT_1;
leds_1[j] = leds_1[index];
}
FastLED.show();
delay(30);
offset++;
}
}
在修改后的代码中,流水灯效果每次移动一个灯的距离,延时时间为 30ms,可以根据需要调整延时时间和移动距离。