#include <FastLED.h>
#define LED_PIN 2
#define NUM_LEDS 60
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define BRIGHTNESS 255
#define BREATH_DELAY 20 // 呼吸变色的延迟时间,控制变化速度
CRGB leds[NUM_LEDS];
// 定义20种不同的颜色
CHSV colors[20] = {
CHSV(0, 255, 255), // 红色
CHSV(15, 255, 255), // 橙色
CHSV(30, 255, 255), // 黄色
CHSV(45, 255, 255), // 明黄色
CHSV(60, 255, 255), // 青色
CHSV(90, 255, 255), // 绿色
CHSV(120, 255, 255), // 青色
CHSV(150, 255, 255), // 浅绿色
CHSV(180, 255, 255), // 蓝色
CHSV(210, 255, 255), // 天蓝色
CHSV(240, 255, 255), // 深蓝色
CHSV(270, 255, 255), // 靛蓝色
CHSV(300, 255, 255), // 紫色
CHSV(330, 255, 255), // 粉红色
CHSV(345, 255, 255), // 浅粉红色
CHSV(0, 0, 255), // 白色
CHSV(0, 255, 127), // 浅灰色
CHSV(0, 0, 127), // 灰色
CHSV(0, 0, 63), // 深灰色
CHSV(0, 0, 0) // 黑色
};
void setup() {
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
for (int i = 0; i < 20; i++) {
breatheColor(colors[i]); // 依次呼吸变色
delay(1000); // 每种颜色的呼吸变色持续1秒
}
}
void breatheColor(CHSV color) {
int breathIncrement = 4; // 呼吸变色的增量
int minBrightness = 0; // 最小亮度
int maxBrightness = 255; // 最大亮度
for (int i = minBrightness; i <= maxBrightness; i += breathIncrement) {
for (int j = 0; j < NUM_LEDS; j++) {
leds[j] = color;
leds[j].fadeToBlackBy(maxBrightness - i); // 根据当前亮度淡化LED颜色
}
FastLED.show();
delay(BREATH_DELAY);
}
for (int i = maxBrightness; i >= minBrightness; i -= breathIncrement) {
for (int j = 0; j < NUM_LEDS; j++) {
leds[j] = color;
leds[j].fadeToBlackBy(maxBrightness - i); // 根据当前亮度淡化LED颜色
}
FastLED.show();
delay(BREATH_DELAY);
}
}