2. ESP32外部中断的开启与初始化(Arduino)

外部中断

中断可以根据中断源分为 硬件中断软件中断

  1. 硬件中断:也被称为外部中断,硬件中断响应外部硬件事件而发生。例如,当检测到触摸时会发生触摸中断,而当 GPIO 引脚的状态发生变化时会发生 GPIO 中断。GPIO 中断和触摸中断属于这一类;
  2. 软件中断:当触发软件事件(例如定时器溢出)时,会发生这种类型的中断。定时器中断是软件中断的一个例子。

外部中断的开启与初始化

attachInterrupt(pin, ISR, mode);

attachInterrupt() 用于将中断服务程序(ISR)附加到指定的引脚上。它接受三个参数:

  1. pin:数字引脚。
  2. ISR:中断服务程序的名称。
  3. mode:中断模式,可以是以下值之一:
    • RISING:上升沿触发中断。
    • FALLING:下降沿触发中断。
    • CHANGE:电平变化触发中断。
    • ONLOW:低电平触发。
    • ONHIGH:高电平触发。

示例代码:

attachInterrupt(2, service_exit14, CHANGE); 
// 将中断服务程序附加到引脚2上,使用电平变化触发中断

外部中断的关闭

void detachInterrupt(uint8_t pin);

detachInterrupt ,关闭指定引脚的外部中断功能:

  • pin:数字引脚编号
//关闭引脚2的外部中断
detachInterrupt(2);

项目示例

外部中断信号控制灯光开关
通过4号引脚外部中断来控制灯光d2

#include <Arduino.h> 
#define d2 2          // 定义数字引脚2的编号为d2
int num=0;         // 初始化计数器num为0

// 中断服务函数
void service_Exit02() {
  num++;           // 每次中断时,计数器加1
  Serial.printf("调用次数:%d",num); // 通过串口打印调用次数
  Serial.println();                    // 换行
  digitalWrite(d2,!digitalRead(d2));   // 切换数字引脚2的状态(高电平变为低电平,低电平变为高电平)
}

void send_plus() {
  digitalWrite(4,!digitalRead(4)); // 切换数字引脚4的状态(高电平变为低电平,低电平变为高电平)
  delay(1000);                   // 延时1秒
}

void setup() {
  Serial.begin(115200);        // 设置串口波特率为115200
  pinMode(d2,OUTPUT);         // 设置数字引脚2为输出模式
  pinMode(4,OUTPUT);         // 设置数字引脚4为输出模式
  attachInterrupt(4,service_Exit02,FALLING); // 将数字引脚4设置为下降沿触发中断,并关联到中断服务函数service_Exit02
}

void loop() {
  send_plus();                // 在主循环中调用send_plus函数,切换数字引脚4的状态
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Arduino ESP32上使用外部中断是一种常见的方式来处理外部事件,比如按钮按下、传感器触发等。ESP32具有多个GPIO引脚可用于外部中断,并且支持上升沿、下降沿和任意电平触发。 以下是使用Arduino代码配置和使用ESP32外部中断的示例: 首先,确定要用作外部中断的GPIO引脚。假设我们选择使用GPIO2作为外部中断引脚。 1. 在setup()函数中,使用pinMode()函数将GPIO2配置为输入模式: ```cpp pinMode(2, INPUT); ``` 2. 使用attachInterrupt()函数来配置外部中断。在这个函数中,您需要指定要触发中断的引脚、中断处理函数和触发类型。以下是一个例子,当GPIO2上的电平发生上升沿时触发中断: ```cpp attachInterrupt(digitalPinToInterrupt(2), interruptHandler, RISING); ``` 其中,digitalPinToInterrupt(2)将引脚号转换为对应的外部中断编号。interruptHandler是您自己定义的中断处理函数。RISING表示上升沿触发,您还可以选择使用FALLING(下降沿触发)或CHANGE(任意电平变化触发)。 3. 编写您自己的中断处理函数。这个函数将在中断发生时被调用。以下是一个简单的示例: ```cpp void interruptHandler() { // 在这里处理中断事件 } ``` 通过这个简单的示例,您可以开始使用外部中断来处理各种事件。请注意,ESP32具有多个GPIO引脚可用于外部中断,您可以根据自己的需求选择合适的引脚和触发类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值