可以适用NYIDE编译软件的条件1是接通电源后恢复上次断电前的状态 条件2是触摸按键2s关闭/打开状态 ,条件3是触碰按键一下可切换档位 1档为呼吸频率由暗--亮--暗.一个循环 6 秒的一个呼吸灯, 2 档为触摸常按0.5秒常亮 ,3 档为触摸常按2秒关闭灯显的代码
时间: 2023-11-28 18:47:19 浏览: 61
以下是适用于NYIDE编译软件的代码:
```c
#include <Arduino.h>
#define BUTTON_PIN 2 // 触摸按键所连接的引脚
int mode = 1; // 初始档位为1
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 将内置LED引脚设为输出模式
pinMode(BUTTON_PIN, INPUT); // 将触摸按键引脚设为输入模式
digitalWrite(LED_BUILTIN, LOW); // 初始状态为灭
}
void loop() {
switch (mode) {
case 1:
breathe(); // 档位1呼吸灯
break;
case 2:
digitalWrite(LED_BUILTIN, HIGH); // 档位2常亮
break;
case 3:
digitalWrite(LED_BUILTIN, LOW); // 档位3关闭灯
break;
}
if (touchButton(BUTTON_PIN, 2000)) { // 如果按键被长按2秒
mode = (mode % 3) + 1; // 切换到下一个档位
}
}
void breathe() {
int brightness = 0;
int fadeAmount = 5;
for (int i = 0; i < 6; i++) { // 一个循环6秒
analogWrite(LED_BUILTIN, brightness);
brightness += fadeAmount;
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount;
}
delay(1000);
}
}
bool touchButton(int pin, int duration) {
static unsigned long lastDebounceTime = 0;
static bool lastButtonState = LOW;
bool buttonState = digitalRead(pin);
unsigned long currentTime = millis();
if (buttonState != lastButtonState) {
lastDebounceTime = currentTime;
}
if ((currentTime - lastDebounceTime) > duration) {
lastButtonState = buttonState;
return buttonState;
}
return false;
}
```
说明:
- `mode` 变量用于存储当前的档位。
- `setup` 函数中,将内置LED引脚设为输出模式,将触摸按键引脚设为输入模式,并将内置LED初始状态设为灭。
- `loop` 函数中,根据当前档位执行相应的操作。如果触摸按键被长按2秒,则切换到下一个档位。
- `breathe` 函数实现了一个循环6秒的呼吸灯效果,每秒钟呼吸一次。
- `touchButton` 函数用于检测触摸按键是否被按下,如果按下并且持续时间超过设定值,则返回 `true`,否则返回 `false`。
阅读全文