// 第一条灯带从中间向两边亮起绿色 for (int i = 0; i < LED_COUNT_1 / 2; i++) { leds_1[LED_COUNT_1 / 2 - i - 1].setRGB(0, 255, 0); leds_1[LED_COUNT_1 / 2 + i].setRGB(0, 255, 0); FastLED.show(); delay(30); } //5秒延时 delay(5000);绿色渐变到红色
时间: 2024-03-22 12:38:05 浏览: 117
好的,你可以尝试以下代码段实现绿色渐变到红色的效果:
```
// 第一条灯带从中间向两边亮起绿色
for (int i = 0; i < LED_COUNT_1 / 2; i++) {
leds_1[LED_COUNT_1 / 2 - i - 1].setRGB(0, 255, 0);
leds_1[LED_COUNT_1 / 2 + i].setRGB(0, 255, 0);
FastLED.show();
delay(30);
}
// 绿色渐变到红色
for (int i = 0; i <= 255; i++) {
for (int j = 0; j < LED_COUNT_1; j++) {
leds_1[j].setRGB(i, 255 - i, 0);
}
FastLED.show();
delay(10);
}
```
这段代码首先是将灯带从中间向两边亮起绿色,然后使用一个新的循环,将绿色逐渐渐变为红色。在每一次循环中,我们将绿色通道的值逐渐降低,同时将红色通道的值逐渐升高,直到最终变成红色。这样就可以实现绿色渐变到红色的效果了。
相关问题
#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]; int pin_switch = 10; // 定义数字输入口pin10接收开关状态 int switch_state = 0; // 定义开关状态变量 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); Serial.begin(9600);//设置串口波特率为9600kbps pinMode(pin_switch, INPUT); // 初始化数字输入口 } void loop() { switch_state = digitalRead(pin_switch); // 读取开关状态 // 开关按下 if (switch_state == LOW) { // 第一条灯带从中间向两边亮起绿色 for (int i = 0; i < LED_COUNT_1 / 2; i++) { leds_1[LED_COUNT_1 / 2 - i - 1].setRGB(0, 255, 0); leds_1[LED_COUNT_1 / 2 + i].setRGB(0, 255, 0); FastLED.show(); delay(50); } //5秒延时 delay(5000); } else { // 开关未按下,灯带状态为白色呼吸灯 bool breathing = true; // 定义一个变量用于记录呼吸灯状态 while (breathing) { // 当呼吸灯状态为true时,执行循环 int brightness = 0; for (int i = 0; i < 7680; i++) { brightness = (exp(sin(i / 50.0 * PI)) - 0.36787944) * 108.0; for (int j = 0; j < LED_COUNT_1; j++) { leds_1[j].setRGB(brightness, brightness, brightness); } FastLED.show(); delay(10); switch_state = digitalRead(pin_switch); if (switch_state == LOW) { // 如果开关被按下,退出循环 breathing = false; break; } } } } }在5秒延时之后添加第一条灯带从两边向中间亮起红色
可以在原代码中添加如下代码来实现第一条灯带从两边向中间亮起红色:
```
// 第一条灯带从两边向中间亮起红色
for (int i = 0; i < LED_COUNT_1 / 2; i++) {
leds_1[i].setRGB(255, 0, 0);
leds_1[LED_COUNT_1 - i - 1].setRGB(255, 0, 0);
FastLED.show();
delay(50);
}
```
在代码中,我们使用了一个 for 循环来控制灯带的亮起过程,同时使用 setRGB() 函数来设置 LED 的颜色为红色。最后调用 FastLED.show() 函数来刷新灯带状态,并使用 delay() 函数来控制每一个 LED 点亮的时间。
#include <FastLED.h> #define LED_PIN_1 3 #define LED_PIN_2 6 #define LED_COUNT_1 42 #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(brightness_1, brightness_1, brightness_1); } FastLED.show(); delay(20); } while (brightness_2 <= 255) { for (int i = 0; i < LED_COUNT_2; i++) { leds_2[i].setRGB(255, 255, 0); leds_2[i].fadeLightBy(brightness_2); } FastLED.show(); brightness_2 += fadeAmount; delay(25); } while (brightness_2 >= 0) { for (int i = 0; i < LED_COUNT_2; i++) { leds_2[i].setRGB(255, 255, 0); leds_2[i].fadeLightBy(brightness_2); } FastLED.show(); brightness_2 -= fadeAmount; delay(25); } }这段代码怎么让第一条灯带呼吸的同时,第二条灯带一点点由暗变亮
你可以在第一个while循环中,每次让第二条灯带的亮度增加一点,如下所示:
```
while (brightness_2 <= 255) {
for (int i = 0; i < LED_COUNT_2; i++) {
leds_2[i].setRGB(255, 255, 0);
leds_2[i].fadeLightBy(brightness_2);
}
FastLED.show();
brightness_2 += fadeAmount;
delay(25);
// 让第二条灯带的亮度增加1
for (int i = 0; i < LED_COUNT_2; i++) {
leds_2[i].fadeLightBy(1);
}
}
```
这样,第二条灯带的亮度就会慢慢增加,同时第一条灯带会呼吸。你可以根据需要调整第二条灯带亮度增加的速度,即调整第二个for循环中的fadeLightBy()函数的参数。
阅读全文