一个按键控制四种模式流水灯,一个按键控制开始
时间: 2023-05-28 17:08:03 浏览: 188
7-1 按键控制LED流水灯模式
5星 · 资源好评率100%
/停止流水灯。
以下是一个可能的解决方案:
```arduino
// 定义流水灯的四个模式
#define MODE_1 1
#define MODE_2 2
#define MODE_3 3
#define MODE_4 4
// 设置流水灯的引脚
#define LED_PIN_1 2
#define LED_PIN_2 3
#define LED_PIN_3 4
#define LED_PIN_4 5
// 设置按键的引脚
#define MODE_BUTTON_PIN 6
#define START_STOP_BUTTON_PIN 7
// 定义流水灯的模式和状态
int mode = MODE_1;
bool isRunning = false;
void setup() {
// 配置引脚模式
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
pinMode(LED_PIN_3, OUTPUT);
pinMode(LED_PIN_4, OUTPUT);
pinMode(MODE_BUTTON_PIN, INPUT_PULLUP);
pinMode(START_STOP_BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
// 检测模式切换按键
if (digitalRead(MODE_BUTTON_PIN) == LOW) {
mode++;
if (mode > MODE_4) {
mode = MODE_1;
}
resetLeds();
}
// 检测开始/停止按键
if (digitalRead(START_STOP_BUTTON_PIN) == LOW) {
isRunning = !isRunning;
if (isRunning) {
startLeds();
} else {
resetLeds();
}
delay(200); // 等待按键弹起
}
// 如果流水灯正在运行,则根据当前模式更新 LED 状态
if (isRunning) {
switch (mode) {
case MODE_1:
updateLeds(1, 0, 0, 0);
break;
case MODE_2:
updateLeds(0, 1, 0, 0);
break;
case MODE_3:
updateLeds(0, 0, 1, 0);
break;
case MODE_4:
updateLeds(0, 0, 0, 1);
break;
}
delay(100); // 等待 LED 更新
}
}
// 将所有 LED 置为 LOW
void resetLeds() {
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, LOW);
digitalWrite(LED_PIN_4, LOW);
}
// 根据参数更新 LED 状态
void updateLeds(bool led1, bool led2, bool led3, bool led4) {
digitalWrite(LED_PIN_1, led1 ? HIGH : LOW);
digitalWrite(LED_PIN_2, led2 ? HIGH : LOW);
digitalWrite(LED_PIN_3, led3 ? HIGH : LOW);
digitalWrite(LED_PIN_4, led4 ? HIGH : LOW);
}
// 将所有 LED 置为 HIGH,然后逐个灭掉
void startLeds() {
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, HIGH);
digitalWrite(LED_PIN_4, HIGH);
delay(100);
resetLeds();
}
```
在这个解决方案中,我们使用了两个按键来控制流水灯。一个按键用于切换四种不同的模式,另一个按键用于开始/停止流水灯。
首先,我们定义了四种不同的模式和每个 LED 的引脚。然后,我们设置了两个按键的引脚,并在 setup() 函数中将它们配置为 INPUT_PULLUP 模式,这意味着它们会被默认拉高,当按下按键时,它们的值将变为 LOW。
在 loop() 函数中,我们检测两个按键是否按下。如果模式切换按键被按下,我们将当前模式加 1,并根据需要将其重置为 1。然后,我们调用 resetLeds() 函数将所有 LED 置为 LOW,并等待下一次循环。
如果开始/停止按键被按下,我们将 isRunning 变量的值取反,以便在下一次循环中开始/停止流水灯。如果流水灯正在运行,我们根据当前模式更新 LED 状态,并等待 100 毫秒以便 LED 更新。如果流水灯已经停止,我们将所有 LED 置为 LOW,然后等待 200 毫秒以便按键弹起。
最后,我们定义了三个辅助函数。resetLeds() 函数将所有 LED 置为 LOW。updateLeds() 函数接受四个参数,用于更新每个 LED 的状态。startLeds() 函数将所有 LED 置为 HIGH,然后逐个灭掉,以开始流水灯的效果。
阅读全文