【ESP32】Arduino开发 | 中断矩阵+按键输入中断例程

对于中断矩阵的详细介绍会放在ESP-IDF开发文章中,跳转栏目目录可以找到对应文章。

1. API

1.1 绑定GPIO中断

attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode);
  • pin:管脚号;
  • handler:中断处理函数;
  • mode:中断触发模式。
中断模式功能
RISING上升沿触发
FALLING下降沿触发
CHANGE任意边沿触发
ONLOW低电平触发
ONHIGH高电平触发
ONLOW_WE低电平唤醒触发
ONHIGH_WE高电平唤醒触发

 1.2 绑定GPIO中断(带参数)

attachInterruptArg(uint8_t pin, voidFuncPtrArg handler, void * arg, int mode);
  • pin:管脚号;
  • handler:中断处理函数;
  • arg:中断处理函数用户参数;
  • mode:中断触发模式。

1.3 解绑GPIO中断

detachInterrupt(uint8_t pin);
  •  pin:管脚号。

2. 例程

        例程实现一个按键的检测,使用中断的方式去判断。

#include <Arduino.h>

static volatile int isr_flag = 0;

void ARDUINO_ISR_ATTR gpio_isr_handler()
{
    isr_flag = 1;
}

void setup()
{
    pinMode(0, INPUT_PULLUP);
    attachInterrupt(0, gpio_isr_handler, RISING);
    Serial.begin(115200);
}

void loop()
{
    if (isr_flag) {
        Serial.println("Key pressed");
        isr_flag = 0;
    }
}

         我的开发板上的按键是连接到IO0上的,带外部上拉,所以GPIO配置成上拉输入模式;中断触发方式设置成上升沿触发,这样当按键释放的时候才会触发中断。

        这里使用一个无用户参数的中断服务函数即可,函数定义加上ARDUINO_ISR_ATTR的标志。处理函数里面只是简单地把标志位置1,然后主循环中检查这个标志,如果为1就打印log,然后复位标志。

        在ESP32中千万不要在中断函数中调用log打印相关的函数,会导致系统崩溃!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马浩同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值