ESP8266 控制 LED 亮灭

一、引脚对应

二、按键控制 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));//避免多次触发
    }
 
}

六、按钮、继电器 比较

按钮和继电器都是常见的电子元件,用于控制电路的开关。它们各自具有一些优点和缺点,下面是它们的比较:

按钮:

优点:

  1. 简单易用: 按钮是一种简单的电子组件,易于使用和安装。
  2. 成本低廉: 按钮的制造成本通常较低,适用于成本敏感的应用场景。
  3. 可靠性高: 由于按钮没有移动部件,因此其可靠性通常比较高,不易出现故障。

缺点:

  1. 有抖动现象: 按钮在按下或释放时可能会产生抖动现象,导致多次触发,需要额外的硬件或软件去抖动处理。
  2. 操作不便: 按钮需要手动操作,对于需要远程或自动化控制的场景,操作不够便利。
  3. 只能实现离散控制: 按钮只能实现开关式的控制,无法实现连续调节或精细控制。

继电器:

优点:

  1. 能够控制高功率设备: 继电器可以控制高功率的电气设备,如电机、加热器等。
  2. 可以实现远程控制: 继电器可以通过电磁信号或网络通信实现远程控制,适用于远程监控和自动化系统。
  3. 稳定可靠: 继电器由机械开关构成,通常比较稳定可靠,适用于长期工作和恶劣环境。

缺点:

  1. 成本较高: 继电器的制造成本较高,且需要额外的驱动电路,成本较按钮更高。
  2. 存在机械磨损: 继电器中的机械开关存在磨损,长时间使用后可能需要维护或更换。
  3. 占用空间大: 继电器通常体积较大,占用空间相对较多,不适合空间有限的应用场景。

硬件和代码方面的区别:

  1. 硬件接线: 按钮通常只需要连接到一个数字输入引脚,而继电器需要连接到控制信号引脚以及电源和负载。
  2. 电路稳定性: 按钮不需要额外的驱动电路,而继电器需要驱动电路来控制电磁线圈。
  3. 软件处理: 对于按钮,可能需要在软件中添加去抖动处理逻辑;而对于继电器,可能需要编写额外的代码来实现电磁线圈的控制和保护逻辑。

七、演示

视频审核中

3月31日

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值