一、引脚对应
二、按键控制 LED 亮灭
2.1样例1
#include <ESP8266WiFi.h>const int ledPin = D2; // LED 连接到 D2 引脚
const int keyPin = D4; // 按键连接到 D4 引脚volatile bool flag = false; // 记录 LED 状态的标志// 外部中断处理函数
ICACHE_RAM_ATTR void handleInterrupt() {flag = !flag; // 切换 LED 状态
}void setup() {pinMode(ledPin, OUTPUT); // 设置 LED 引脚为输出模式pinMode(keyPin, INPUT_PULLUP);// 设置按键引脚为输入模式,并启用上拉电阻attachInterrupt(digitalPinToInterrupt(keyPin), handleInterrupt, FALLING); // 设置外部中断
}void loop() {if (flag) {digitalWrite(ledPin, HIGH); // 点亮 LED} else {digitalWrite(ledPin, LOW); // 关闭 LED}
}
2.2样例2
#include <ESP8266WiFi.h>const int ledPin = D2; // LED 连接到 D2 引脚
const int keyPin = D4; // 按键连接到 D4 引脚volatile bool flag = false; // 记录 LED 状态的标志// 外部中断处理函数
ICACHE_RAM_ATTR void handleInterrupt() {flag = !flag; // 切换 LED 状态
}void setup() {pinMode(ledPin, OUTPUT); // 设置 LED 引脚为输出模式pinMode(keyPin, INPUT_PULLUP);// 设置按键引脚为输入模式,并启用上拉电阻attachInterrupt(digitalPinToInterrupt(keyPin), handleInterrupt, FALLING); // 设置外部中断
}void loop() {// 控制 LED 状态digitalWrite(ledPin, flag ? HIGH : LOW); // 根据标志控制 LED 亮灭
}
三、代码解释
使用了 volatile bool 类型的 flag 变量来记录 LED 的状态。当按键按下时,会触发外部中断,调用 handleInterrupt() 函数来切换 flag 的值,从而切换 LED 的状态。主循环中根据 flag 的值来控制 LED 的亮灭。
四、attachInterrupt()
函数
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
pin
:指定要附加中断的硬件引脚。通常,你需要将其转换为中断编号,使用digitalPinToInterrupt(pin)
函数。ISR
:是中断服务程序的函数名,也就是当中断触发时要执行的代码块。mode
:指定触发中断的条件,可以是CHANGE
(电平变化触发)、RISING
(上升沿触发)或FALLING
(下降沿触发)。
例如,在上面的示例中,我们使用了attachInterrupt(digitalPinToInterrupt(keyPin), handleInterrupt, FALLING);
将外部中断与keyPin
引脚关联起来,当keyPin
引脚检测到下降沿时(即按键按下),将调用handleInterrupt
函数。
五、区别于传统的输入上拉
int led=2;
int key=4;
int flag=0;
void setup()
{pinMode(led,OUTPUT);pinMode(key,INPUT_PULLUP);
void loop()
{if(digitalRead(key)==LOW){if(flag==0){flag=1; digitalWrite(led,LOW);}else{flag=0; digitalWrite(led,HIGH);}while(!digitalRead(key));//避免多次触发}}
六、按钮、继电器 比较
按钮和继电器都是常见的电子元件,用于控制电路的开关。它们各自具有一些优点和缺点,下面是它们的比较:
按钮:
优点:
- 简单易用: 按钮是一种简单的电子组件,易于使用和安装。
- 成本低廉: 按钮的制造成本通常较低,适用于成本敏感的应用场景。
- 可靠性高: 由于按钮没有移动部件,因此其可靠性通常比较高,不易出现故障。
缺点:
- 有抖动现象: 按钮在按下或释放时可能会产生抖动现象,导致多次触发,需要额外的硬件或软件去抖动处理。
- 操作不便: 按钮需要手动操作,对于需要远程或自动化控制的场景,操作不够便利。
- 只能实现离散控制: 按钮只能实现开关式的控制,无法实现连续调节或精细控制。
继电器:
优点:
- 能够控制高功率设备: 继电器可以控制高功率的电气设备,如电机、加热器等。
- 可以实现远程控制: 继电器可以通过电磁信号或网络通信实现远程控制,适用于远程监控和自动化系统。
- 稳定可靠: 继电器由机械开关构成,通常比较稳定可靠,适用于长期工作和恶劣环境。
缺点:
- 成本较高: 继电器的制造成本较高,且需要额外的驱动电路,成本较按钮更高。
- 存在机械磨损: 继电器中的机械开关存在磨损,长时间使用后可能需要维护或更换。
- 占用空间大: 继电器通常体积较大,占用空间相对较多,不适合空间有限的应用场景。
硬件和代码方面的区别:
- 硬件接线: 按钮通常只需要连接到一个数字输入引脚,而继电器需要连接到控制信号引脚以及电源和负载。
- 电路稳定性: 按钮不需要额外的驱动电路,而继电器需要驱动电路来控制电磁线圈。
- 软件处理: 对于按钮,可能需要在软件中添加去抖动处理逻辑;而对于继电器,可能需要编写额外的代码来实现电磁线圈的控制和保护逻辑。
七、演示
视频审核中