#include <FastLED.h> //控制LED灯带的发光,有许多预定义好的发光模式
#include <Button2.h> //自定义按钮库,包含双击、长按等多种操作
#define BUTTON_PIN 14 //定义按钮连接的digital I/O口为14
#define LED_PIN 5 //LED连接的digital I/O口为5
#define NUM_LEDS 21 //灯带中LED的数量
#define BRIGHTNESS 255 //初始化亮度255
#define LED_TYPE WS2812 //LED灯带类型为WS2812
#define COLOR_ORDER GRB //定义RGB色彩模式
CRGB leds[NUM_LEDS]; //初始化虚拟的LED灯带,灯带由一定数量的LED灯珠组成,可以看作一个整体,实现复杂的光亮模式
bool button_up = true; //记录按钮按下的状态,true代表按钮松开
CRGB led_palette[10]; //初始化一个数组,用来放置所有10种可以显示在LED灯带上的调色盘颜色模式
int color_index = 0; //用来记录颜色模式顺序
Button2 button; //定义一个按钮
void keyLongClick(Button2& btn) { //定义按下时长大于1500ms为长按,长按后led熄灭
unsigned int time = btn.wasPressedFor();
if (time > 1500) {
leds[0] = CRGB::Black; //LED熄灭
FastLED.show(); //标准语法
}
}
void keyPressed(Button2& btn) { //定义普通按键操作,每按下一次更换下一种显示颜色模式
leds[0] = led_palette[color_index]; //将存储好的每一种调色盘的颜色模式赋予LED灯
FastLED.show(); //标准语法,让虚拟调色盘的颜色模式显示在LED灯珠上
color_index++;
if (color_index > 10)
color_index = 0;
}
void setup() {
Serial.begin(115200);
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS); //标准语法,初始化一个虚拟LED灯带,定义好它的类型、数量等
FastLED.setBrightness( BRIGHTNESS ); //初始化LED亮度
button.begin(BUTTON_PIN); //标准语法,初始化按钮
button.setLongClickHandler(keyLongClick); //标准语法,设置长按模式下需要执行的函数逻辑
button.setPressedHandler(keyPressed); //标准语法,设置普通按键模式下需要执行的函数逻辑
led_palette[0] = CRGB::Red; //定义10种调色盘模式,用于显示再LED上
led_palette[1] = CRGB::Green;
led_palette[2] = CRGB::Blue;
led_palette[3] = CRGB::AliceBlue;
led_palette[4] = CRGB::Aqua;
led_palette[5] = CRGB::BlueViolet;
led_palette[6] = CRGB::Chartreuse;
led_palette[7] = CRGB::DeepPink;
led_palette[8] = CRGB::FairyLight;
led_palette[9] = CRGB::MediumTurquoise;
}
void loop() {
button.loop(); //标准语法
delay(10); // this speeds up the simulation
}