开关按下时,添加能量条灯效的代码
时间: 2024-03-22 15:37:05 浏览: 94
好的,下面是一份用于添加能量条灯效的代码,你可以根据自己的需要进行修改和优化:
```
#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; // 定义开关状态变量
int energy = 0; // 定义能量值变量
int energy_per_sec = 10; // 每秒钟增加的能量值
int energy_max = 100; // 能量条最大值
int energy_section = 10; // 能量条分为几个部分
int energy_color[10][3] = {{255, 0, 0}, {255, 128, 0}, {255, 255, 0}, {128, 255, 0}, {0, 255, 0}, {0, 128, 255}, {0, 0, 255}, {128, 0, 255}, {255, 0, 255}, {255, 0, 128}}; // 定义每个能量条部分的颜色
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) {
// 开关按下
} 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;
}
// 每秒钟增加一定能量值
if (i % 100 == 0) {
energy += energy_per_sec;
if (energy > energy_max) {
energy = energy_max;
}
}
}
// 显示能量条灯效
int section_energy = energy_max / energy_section;
for (int i = 0; i < energy_section; i++) {
int section_start = i * section_energy;
int section_end = (i + 1) * section_energy;
if (energy >= section_end) {
for (int j = 0; j < section_energy; j++) {
leds_2[section_start + j].setRGB(energy_color[i][0], energy_color[i][1], energy_color[i][2]);
}
} else if (energy > section_start) {
int section_progress = (energy - section_start) * section_energy / (section_end - section_start);
for (int j = 0; j < section_progress; j++) {
leds_2[section_start + j].setRGB(energy_color[i][0], energy_color[i][1], energy_color[i][2]);
}
}
}
FastLED.show();
}
}
}
```
这段代码在开关未按下时,会执行白色呼吸灯效。而在开关按下时,会根据当前能量值来显示能量条灯效。能量值每秒钟会增加一定的值,同时能量条会被分为若干个部分,每个部分的颜色根据能量值来确定。当能量值达到一定的值时,能量条灯效的颜色会变化。
阅读全文