reset button 可以执行按钮
#define BUTTON_PIN 13 // 按钮接的 GPIO
#define RELAY_PIN 25 // 继电器控制引脚
bool lastButtonState = HIGH;
bool pressed = false;
unsigned long pressStartTime = 0;
const unsigned long pressDuration = 100; // 按住100ms就松开
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // 使用内部上拉
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // 初始断开(高电平)
Serial.begin(115200);
Serial.println("System Ready.");
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (!pressed && buttonState == LOW && lastButtonState == HIGH) {
// 按钮刚被按下
Serial.println("Button Pressed: Triggering Relay");
digitalWrite(RELAY_PIN, LOW); // 启动继电器(啪)
pressStartTime = millis();
pressed = true;
}
// 到时间后松开继电器,避免长期连接
if (pressed && millis() - pressStartTime > pressDuration) {
digitalWrite(RELAY_PIN, HIGH); // 断开继电器(松开)
Serial.println("Relay released.");
pressed = false;
}
lastButtonState = buttonState;
}
代码直接控制继电器(测试完毕 可运行✅)
#define RELAY_PIN 25 // 继电器连接 D25
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // 默认关闭
delay(1000); // 等1秒
digitalWrite(RELAY_PIN, LOW); // 啪一声
delay(1000); // 保持1秒
digitalWrite(RELAY_PIN, HIGH); // 松开
}
void loop() {
// 不做任何事
}
测试按钮(测试完毕 可运行✅)
#define BUTTON_PIN 13 // 你接在 D13 的按钮
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("🟢 Button test started...");
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
Serial.println("🔴 Button Pressed!");
delay(300); // 防止刷屏
} else {
Serial.println("⚪️ Button Released");
delay(300);
}
}
按钮控制继电器(测试完毕 可运行✅)
// 定义引脚
const int buttonPin = 13; // 按钮1引脚
const int relayPin = 33; // 继电器引脚
// 定义变量
unsigned long lastButtonPress = 0; // 上次按下按钮的时间
unsigned long debounceTime = 100; // 按钮去抖动时间,100ms
unsigned long relayDuration = 200; // 继电器输出持续时间,200ms
bool relayState = false; // 继电器状态
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // 设置按钮引脚为输入,并启用内部上拉电阻
pinMode(relayPin, OUTPUT); // 设置继电器引脚为输出
digitalWrite(relayPin, LOW); // 初始化继电器状态为关闭
}
void loop() {
int buttonState = digitalRead(buttonPin); // 读取按钮状态
// 检查按钮是否被按下(低电平)
if (buttonState == LOW) {
unsigned long currentTime = millis(); // 获取当前时间
// 检查按钮是否按下并且超过了去抖动时间
if (currentTime - lastButtonPress > debounceTime) {
// 更新最后按下按钮的时间
lastButtonPress = currentTime;
// 激活继电器
digitalWrite(relayPin, HIGH);
relayState = true;
// 设置一个定时器,200ms后关闭继电器
delay(relayDuration);
digitalWrite(relayPin, LOW);
relayState = false;
}
}
}
四个按钮延迟版本(测试完毕 可运行✅)
// 引脚定义
const int relayPin = 33; // 继电器控制引脚
const int btnA = 25; // 模式A - 2秒
const int btnB = 26; // 模式B - 4秒
const int btnC = 27; // 模式C - 6秒
const int btnD = 14; // 模式D - 8秒
// 防抖参数
unsigned long debounceTime = 100;
unsigned long lastPressA = 0;
unsigned long lastPressB = 0;
unsigned long lastPressC = 0;
unsigned long lastPressD = 0;
void setup() {
// 初始化按钮引脚
pinMode(btnA, INPUT_PULLUP);
pinMode(btnB, INPUT_PULLUP);
pinMode(btnC, INPUT_PULLUP);
pinMode(btnD, INPUT_PULLUP);
// 初始化继电器引脚
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // 默认关闭继电器
}
void loop() {
unsigned long currentTime = millis();
// 按钮A(2秒)
if (digitalRead(btnA) == LOW && currentTime - lastPressA > debounceTime) {
lastPressA = currentTime;
digitalWrite(relayPin, HIGH);
delay(2000);
digitalWrite(relayPin, LOW);
}
// 按钮B(4秒)
if (digitalRead(btnB) == LOW && currentTime - lastPressB > debounceTime) {
lastPressB = currentTime;
digitalWrite(relayPin, HIGH);
delay(4000);
digitalWrite(relayPin, LOW);
}
// 按钮C(6秒)
if (digitalRead(btnC) == LOW && currentTime - lastPressC > debounceTime) {
lastPressC = currentTime;
digitalWrite(relayPin, HIGH);
delay(6000);
digitalWrite(relayPin, LOW);
}
// 按钮D(8秒)
if (digitalRead(btnD) == LOW && currentTime - lastPressD > debounceTime) {
lastPressD = currentTime;
digitalWrite(relayPin, HIGH);
delay(8000);
digitalWrite(relayPin, LOW);
}
}