// 慢慢熄灭灯带 for (int i = 255; i >= 0; i--) { for (int j = 0; j < LED_COUNT_1; j++) { leds_1[j].setRGB(0, i, 0); } FastLED.show(); delay(10); }慢慢熄灭灯带并渐变到红色
时间: 2024-03-22 10:38:04 浏览: 12
好的,你可以尝试以下代码段实现慢慢熄灭灯带并渐变到红色:
```
// 慢慢熄灭灯带并渐变到红色
for (int i = 255; i >= 0; i--) {
for (int j = 0; j < LED_COUNT_1; j++) {
leds_1[j].setRGB(i, 0, 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秒延时之后添加慢慢熄灭灯带
你可以在开关未按下的情况下,在循环之后添加一个慢慢熄灭灯带的代码段,例如:
```
// 开关未按下,灯带状态为白色呼吸灯
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;
}
}
}
// 慢慢熄灭灯带
for (int i = 255; i >= 0; i--) {
for (int j = 0; j < LED_COUNT_1; j++) {
leds_1[j].setRGB(i, i, i);
}
FastLED.show();
delay(10);
}
```
这段代码首先在呼吸灯循环结束后,进入到一个新的循环,用于慢慢熄灭灯带。在这个循环中,我们从亮度最高的白色开始,慢慢降低亮度,最终将灯带熄灭。
#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); } void loop() { int center = LED_COUNT / 2; // 计算中心位置 int brightness = 0; int fadeAmount = 5; int delayTime = 25; // 初始化延时时间为50毫秒 //红色从两端开始亮起 /*for (int i = 0; i <= center; i++) { leds[i].setRGB(0, 255, 0); // 从第一个灯开始向中间亮起,设置红色 leds[LED_COUNT - 1 - i].setRGB(255, 0, 0); // 从最后一个灯开始向中间亮起,设置红色 FastLED.show(); delay(delayTime); // 延时 delayTime -= 1; // 延时时间逐渐减少 } delayTime = 25; // 重置延时时间为50毫秒 for (int i = 0; i <= center; i++) { leds[i].setRGB(0,0, 0); // 从第一个灯开始向中间熄灭 leds[LED_COUNT - 1 - i].setRGB(0, 0, 0); // 从最后一个灯开始向中间熄灭 FastLED.show(); delay(delayTime); // 延时 delayTime += 1; // 延时时间逐渐增加 } */ // 从中心位置开始向两端亮起 for (int i = center; i >= 0; i--) { leds[i].setRGB(0, 255, 0); // 从中心位置开始向两端亮起,设置红色 leds[LED_COUNT - 1 - i].setRGB(0, 255, 0); // 从中心位置开始向两端亮起,设置红色 FastLED.show(); delay(delayTime); // 延时 delayTime += 1; // 延时时间逐渐减少 } delayTime = 25; // 重置延时时间为50毫秒 for (int i = center; i >= 0; i--) { leds[i].setRGB(0, 0, 0); // 从中心位置开始向两端熄灭 leds[LED_COUNT - 1 - i].setRGB(0, 0, 0); // 从中心位置开始向两端熄灭 FastLED.show(); delay(delayTime); // 延时 delayTime -= 1; // 延时时间逐渐增加 } }另外增加一条灯带
如果你需要增加一条灯带,需要先确定新灯带的引脚和LED数量。假设新灯带的引脚为6,LED数量为20,那么你需要在代码中添加以下内容:
```
#define LED_PIN_2 6
#define LED_COUNT_2 20
CRGB leds_2[LED_COUNT_2];
void setup() {
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, LED_COUNT);
FastLED.addLeds<LED_TYPE, LED_PIN_2, COLOR_ORDER>(leds_2, LED_COUNT_2);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
// 程序的其他部分不变
// 在需要控制新灯带的地方,使用leds_2数组代替leds数组即可
}
```
这样,在setup函数中,你需要添加一行代码来初始化新灯带的设置。在loop函数中,如果需要控制新灯带的亮灭,就使用新的leds_2数组。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)