// 定义元件引脚
const int button = 2; // 按钮接在 2 号脚
const int led = 5; // LED 接在 5 号脚
// 用来存储一些状态和数值
int buttonState = 0; // 按钮状态(按下/没按下)
int fadeAmount = 5; // 渐变的步进值(数字越小,灯光越平滑)
int ms = 0; // 从旋钮读取的数值,用来调节闪烁速度
// 初始化
void setup() {
Serial.begin(9600); // 打开串口监视器(方便调试)
pinMode(button, INPUT_PULLUP); // 设置按钮为输入
pinMode(led, OUTPUT); // 设置 LED 为输出
pinMode(A0, INPUT); // 旋钮(电位器)接在 A0
}
// 主循环
void loop() {
detect(); // 读取按钮和旋钮的状态
if (!buttonState) { // 如果按钮被按下
blinkLed(2, ms); // LED 先闪烁 2 次(速度由旋钮控制)
fadeLed(); // 然后 LED 做“呼吸灯”效果
} else {
digitalWrite(led, LOW); // 按钮没按时保持熄灭
}
}
// 读取输入
void detect() {
buttonState = digitalRead(button); // 读按钮(0 或 1)
ms = analogRead(A0); // 读旋钮(0~1023)
// 把旋钮的范围换算成灯光渐变的速度(13~1)
fadeAmount = map(ms, 0, 1023, 13, 1);
Serial.println(String(ms) + " " + String(fadeAmount)); // 打印出来看看
}
// 让 LED 闪烁几次
void blinkLed(int times, int delayTime) {
for (int i = 0; i < times; i++) {
digitalWrite(led, HIGH); // 亮
delay(delayTime); // 等待
digitalWrite(led, LOW); // 灭
delay(delayTime); // 等待
}
}
// 渐亮、渐暗(呼吸灯效果)
void fadeLed() {
// 渐亮
for (int i = 0; i <= 255; i += fadeAmount) {
analogWrite(led, i); // 设置亮度
delay(10);
}
// 渐灭
for (int i = 255; i >= 0; i -= fadeAmount) {
analogWrite(led, i);
delay(10);
}
}