// 定义连接流水灯的引脚
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
int numPins = 8; // LED数量
// 定义连接呼吸灯的引脚
int breathingPin = 10; // 连接到呼吸灯的引脚,确保是PWM兼容引脚
int brightness = 0; // 初始亮度
int fadeAmount = 5; // 每次亮度变化的值
unsigned long previousMillis = 0; // 保存上一次切换功能的时间
const long interval = 2000; // 切换功能的时间间隔
int currentMode = 0; // 当前模式变量
void setup() {
// 初始化流水灯引脚为输出模式
for (int i = 0; i < numPins; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(breathingPin, OUTPUT); // 初始化呼吸灯引脚为输出模式
}
void loop() {
unsigned long currentMillis = millis(); // 获取当前时间
// 检查是否到达切换功能的时间
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // 更新上一次切换功能的时间
currentMode = 1 - currentMode; // 切换模式
}
// 执行当前选择的功能
if (currentMode == 0) {
// 流水灯功能
runMarquee();
} else {
// 呼吸灯功能
runBreathing();
}
}
// 流水灯功能
void runMarquee() {
for (int i = 0; i < numPins; i++) {
digitalWrite(ledPins[i], HIGH);
delay(100);
digitalWrite(ledPins[i], LOW);
}
for (int i = numPins - 1; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH);
delay(100);
digitalWrite(ledPins[i], LOW);
}
}
// 呼吸灯功能
void runBreathing() {
analogWrite(breathingPin, brightness);
brightness = brightness + fadeAmount;
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount; // 改变亮度变化的方向
}
delay(30); // 等待一段时间
}