v1.3增加一个简单的越障模式
This commit is contained in:
1 parent
9d56ba85f1
commit
7a1931cb72
1835 files changed
+475654
-1
No files matched your search
@@ -0,0 +1,118 @@
|
||||
/* ---------------------------------
|
||||
* LED 控制模块实现
|
||||
|
||||
// 开始红色闪烁,每次持续200毫秒,闪烁3次
|
||||
startLEDBlink(CRGB::Red, 200, 3);
|
||||
|
||||
// 开始蓝色闪烁,每次持续500毫秒,闪烁5次
|
||||
startLEDBlink(CRGB::Blue, 500, 5);
|
||||
|
||||
// 停止闪烁
|
||||
stopLEDBlink();
|
||||
|
||||
// 设置LED为绿色常亮
|
||||
setLEDColor(CRGB::Green);
|
||||
------------------------------------- */
|
||||
#include "RGBController.h"
|
||||
|
||||
// LED 全局变量定义(与主文件解耦)
|
||||
CRGB leds[NUM_LEDS];
|
||||
unsigned long previousBlinkMillis = 0;
|
||||
int blinkState = 0;
|
||||
int blinkCount = 0;
|
||||
bool isBlinking = false;
|
||||
CRGB blinkColors[6] = {CRGB::Red, CRGB::Red, CRGB::Yellow, CRGB::Yellow, CRGB::Green, CRGB::Green};
|
||||
|
||||
// 新增全局变量定义
|
||||
unsigned long blinkDuration = 200; // 默认闪烁持续时间200毫秒
|
||||
unsigned long blinkInterval = 200; // 默认闪烁间隔时间200毫秒
|
||||
CRGB currentBlinkColor = CRGB::Red; // 默认红色
|
||||
int totalBlinkCount = 3; // 默认闪烁3次
|
||||
bool useColorSequence = false; // 默认不使用颜色序列模式
|
||||
|
||||
// 初始化LED(替代原setup中的FastLED初始化代码)
|
||||
void initLEDs() {
|
||||
FastLED.addLeds<WS2812, RGB_PIN, GRB>(leds, NUM_LEDS);
|
||||
FastLED.setBrightness(50);
|
||||
fill_solid(leds, NUM_LEDS, CRGB::Black); // 初始熄灭
|
||||
FastLED.show();
|
||||
}
|
||||
|
||||
// 开始LED闪烁
|
||||
void startLEDBlink(CRGB color, unsigned long duration, int count) {
|
||||
currentBlinkColor = color; // 设置闪烁颜色
|
||||
blinkDuration = duration; // 设置闪烁持续时间
|
||||
blinkInterval = duration; // 设置闪烁间隔时间(与持续时间相同)
|
||||
totalBlinkCount = count * 2; // 设置总闪烁次数(亮灭算一次)
|
||||
useColorSequence = false; // 使用单色模式
|
||||
|
||||
blinkCount = 0; // 重置当前闪烁计数
|
||||
blinkState = 0; // 重置闪烁状态
|
||||
isBlinking = true; // 开始闪烁
|
||||
previousBlinkMillis = millis(); // 重置时间戳
|
||||
}
|
||||
|
||||
// 开始颜色序列闪烁
|
||||
void startColorSequenceBlink() {
|
||||
blinkDuration = 50; // 设置闪烁持续时间
|
||||
blinkInterval = 50; // 设置闪烁间隔时间
|
||||
totalBlinkCount = 6; // 设置总闪烁次数(6种颜色)
|
||||
useColorSequence = true; // 使用颜色序列模式
|
||||
|
||||
blinkCount = 0; // 重置当前闪烁计数
|
||||
blinkState = 0; // 重置闪烁状态
|
||||
isBlinking = true; // 开始闪烁
|
||||
previousBlinkMillis = millis(); // 重置时间戳
|
||||
}
|
||||
|
||||
// 停止LED闪烁
|
||||
void stopLEDBlink() {
|
||||
isBlinking = false;
|
||||
fill_solid(leds, NUM_LEDS, CRGB::Black);
|
||||
FastLED.show();
|
||||
}
|
||||
|
||||
// 设置LED颜色
|
||||
void setLEDColor(CRGB color) {
|
||||
fill_solid(leds, NUM_LEDS, color);
|
||||
FastLED.show();
|
||||
}
|
||||
|
||||
// 处理LED闪烁逻辑(非阻塞实现)
|
||||
void handleLEDBlink() {
|
||||
if (!isBlinking) return;
|
||||
|
||||
unsigned long currentMillis = millis();
|
||||
|
||||
// 检查是否达到切换时间
|
||||
if (currentMillis - previousBlinkMillis >= (blinkState == 0 ? blinkDuration : blinkInterval)) {
|
||||
previousBlinkMillis = currentMillis;
|
||||
|
||||
if (blinkState == 0) {
|
||||
// LED亮起
|
||||
if (useColorSequence) {
|
||||
// 使用颜色序列模式
|
||||
fill_solid(leds, NUM_LEDS, blinkColors[blinkCount % 6]);
|
||||
} else {
|
||||
// 使用单色模式
|
||||
fill_solid(leds, NUM_LEDS, currentBlinkColor);
|
||||
}
|
||||
FastLED.show();
|
||||
blinkState = 1;
|
||||
} else {
|
||||
// LED熄灭
|
||||
fill_solid(leds, NUM_LEDS, CRGB::Black);
|
||||
FastLED.show();
|
||||
blinkState = 0;
|
||||
blinkCount++;
|
||||
|
||||
// 检查是否完成所有闪烁
|
||||
if (blinkCount >= totalBlinkCount) {
|
||||
isBlinking = false;
|
||||
blinkCount = 0;
|
||||
fill_solid(leds, NUM_LEDS, CRGB::Black);
|
||||
FastLED.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user