#include <FastLED.h>
/**
初始化LED控制光带: FastLED.addLeds<控制灯珠的类型, 控制板上使用的IO端口, 色彩类型>(leds数组, 灯珠的总数量)
如:FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
刷新灯的色彩显示:FastLED.show();
将所有灯熄灭:FastLED.clear();
设置灯带亮度,最大为255:FastLED.setBrightness(30);
设置灯珠:
一. fill_solid(leds数组, 从起始位置开始算的数量, 设置的颜色值)
如:
1. fill_solid(leds, 30, CRGB::Red); // 将leds光带的从头数前30个灯珠设置为红色
2. fill_solid(leds+5, 3, CRGB::Red); // 设置leds光带从头数第6个光珠到后面3个光珠颜色为红色:
二. fill_rainbow(leds数组, 从起始位置开始算的数量, 彩虹色的其实色调值-最大为255, 相邻灯珠的色调差-最大为255)
如:fill_rainbow(leds+5, 30, beginHue, deltaHue); // 设置leds光带从头数第6个光珠到后面的30个光珠颜色的彩虹色
三. fill_gradient_RGB(leds数组, 开始的灯珠编号, 开始的颜色, 最后一个灯珠的编号, 结束的颜色)
如:
1.fill_gradient_RGB(leds, 0, CRGB::Red, 9, CRGB::Blue); // 将leds光带前10个灯珠设置为渐变色。起始为红色,尾部为蓝色,中间为由红色到蓝色的渐变色。
2.fill_gradient(leds, 0, CHSV(50, 255,255) , 9, CHSV(150,255,255), SHORTEST_HUES); // 将leds光带前10个灯珠设置为渐变色。起始为HSV(50, 255,255)色彩,结束为CHSV(150,255,255)色彩,灯带采用短色调过渡方式。
3.fill_gradient(leds, 0, CHSV(50, 255,255) , 9, CHSV(150,255,255), LONGEST_HUES); // 将leds光带前10个灯珠设置为渐变色。起始为HSV(50, 255,255)色彩,结束为CHSV(150,255,255)色彩。灯带采用长色调过渡方式。
fill_palette(leds数组, 从起始位置开始算的数量, 灯带头部第一个灯珠的色板色彩序号, 相邻两个灯珠见色板色彩需要相差8, 预设色板, 亮度-最高255, 过渡效果)
预设色板有:CloudColors_p、LavaColors_p、OceanColors_p、ForestColors_p、RainbowColors_p、RainbowStripeColors_p、PartyColors_p、HeatColors_p
如:
1.fill_palette(leds, 30, 0, 8, OceanColors_p, 255, LINEARBLEND); // 将leds光带的从头数30个灯珠设置为渐变色。渐变色的色彩全部来自FastLED预设色板OceanColors_p
2.fill_palette (leds+5, 15, 31, 5, OceanColors_p, 255, LINEARBLEND); // 设置光带开头第6个灯珠到后面的15个灯珠为OceanColors_p色板所设定的颜色,颜色编号从第31开始,间隔5的线性渐变
使用预设色板:ColorFromPalette(预设色板, 色板中颜色下标, 亮度, 线性过度效果);
预设色板有:CloudColors_p、LavaColors_p、OceanColors_p、ForestColors_p、RainbowColors_p、RainbowStripeColors_p、PartyColors_p、HeatColors_p
如:
1.leds[0] = ColorFromPalette( RainbowColors_p, 0, 128, LINEARBLEND); // 将leds光带的第一个灯珠设置为RainbowColors_p色板中颜色序号为0的颜色(红色),亮度为128,色彩过渡为线性过渡效果
2.leds[9] = ColorFromPalette( OceanColors_p, 120, 255, LINEARBLEND); // 将leds光带的第十个灯珠设置为OceanColors_p色板中颜色序号为120的颜色,LED亮度为255,色彩过渡为线性过渡效果
逐渐熄灭LED光带:fadeToBlackBy(leds数组, 调整灯珠数量, 亮度-最大255)
调用fadeToBlackBy(X)时,它将使像素的r,g,b值按一定百分比褪色。反复调用它将最终消失为黑色(其中r,g,b = 0,0,0)。
注意,指定的数字是255的百分比,因此,例如,使用64将是64/255 = 25%,使用10将是10/255 = 4%。0表示没有衰落。
如:
1. fadeToBlackBy( leds, 30, 10); // 将leds光带的30个灯珠亮度调低10。(注:LED亮度值可选数值范围为0 – 255)
EVERY_N_SECONDS(seconds); EVERY_N_SECONDS函数所包含的程序内容将定时执行,执行时间间隔由函数参数决定。单位:秒
EVERY_N_MILLISECONDS(seconds); EVERY_N_MILLISECONDS函数所包含的程序内容将定时执行,执行时间间隔由函数参数决定。单位:毫秒
如:
1.EVERY_N_SECONDS(10){}; // 函数所包含的程序内容将定时执行,执行时间间隔为10秒。
2.EVERY_N_SECONDS(1){}; // 函数所包含的程序内容将定时执行,执行时间间隔为1秒。
3.EVERY_N_MILLISECONDS(100){}; // 函数所包含的程序内容将定时执行,执行时间间隔为100毫秒。
*/
#define NUM_LEDS 15 // LED灯珠数量
#define DATA_PIN 2 // Arduino输出控制信号引脚
#define LED_TYPE WS2812 // LED灯带型号
#define COLOR_ORDER GRB // RGB灯珠中红色、绿色、蓝色LED的排列顺序
#define twinkleInterval 100 // 闪烁间隔时间 (毫秒)
#define twinkleChance 80 // 闪烁数量,数值越大闪烁越多(0-255)
uint8_t max_bright = 255; // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高
CRGB leds[NUM_LEDS]; // 建立光带leds
void setup() {
Serial.begin(9600); // 启动串行通讯
delay(1000); // 稳定性等待
LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // 初始化光带
FastLED.setBrightness(max_bright); // 设置光带亮度
}
void loop() {
// int pos = random8(NUM_LEDS);
// EVERY_N_MILLISECONDS( twinkleInterval ) {
// if ( random8() < twinkleChance) {
// leds[pos] = ColorFromPalette( PartyColors_p, random8(255), 128, LINEARBLEND);
// }
// }
// EVERY_N_MILLISECONDS( 20 ) {
// fadeToBlackBy( leds, NUM_LEDS, 10);
// }
// FastLED.show();
// delay(50);
fill_gradient(leds, 0, CHSV(50, 255,255) , 10, CHSV(150,255,255), LONGEST_HUES); // SHORTEST_HUES LONGEST_HUES
FastLED.show();
delay(50);
}