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

news/2024/12/21 19:29:53/

对于中断矩阵的详细介绍会放在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打印相关的函数,会导致系统崩溃!!!

 


http://www.ppmy.cn/news/1526913.html

相关文章

【百日算法计划】:每日一题,见证成长(014)

题目 奇偶链表 给定一个单链表&#xff0c;把所有的奇数节点和偶数节点分别排在一起 示例: 输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL 思路 构建两个结果链表&#xff0c;分别存储奇偶节点 使用一个辅助变…

初识爬虫1

学习路线&#xff1a;爬虫基础知识-requests模块-数据提取-selenium-反爬与反反爬-MongoDB数据库-scrapy-appium。 对应视频链接(百度网盘)&#xff1a;正在整理中 爬虫基础知识&#xff1a; 1.爬虫的概念 总结&#xff1a;模拟浏览器&#xff0c;发送请求&#xff0c;获取…

vue项目本地可以访问接口,浏览器输入接口可以访问数据,部署到服务器无法报接口404

需求变动&#xff0c;原本访问python的后端接口&#xff0c;现在新增Java的接口 新增的接口在服务器上一直404 &#xff0c;本地正常&#xff0c;浏览器输入路径正常。 两个后端不同端口&#xff0c;前端配置了两个转发如下&#xff1a; dev: {// PathsassetsSubDirectory: st…

uni-app plus.runtime.arguments 获取参数

uni-app plus.runtime.arguments 获取参数 问题 在 app.vue 中 onShow 获取 应用启动的参数&#xff1a;plus.runtime.arguments 这个是可行的. APP打开以后, 进入到了后台 然后再恢复到前台 仍然会走一次 onShow的生命周期 然后获取到plus.runtime.arguments 中的参数&#x…

Linux:vim编辑技巧

命令模式 光标跳转 输入18&#xff0c;再输入G&#xff0c;可以跳转到18行。 复制、粘贴、删除 P是往上一行粘贴 小写u可以撤销 查找/撤销/保存 大写U可能失效&#xff0c;用CTRLr 末行模式 保存/退出/文件操作 字符串替换 开关参数的控制

CentOS入门宝典:从零到一构建你的Linux服务器帝国

目录 引言 一、CentOS简介与版本选择 1.1 CentOS是什么&#xff1f; 1.2 版本选择 二、安装CentOS 2.1 准备安装介质 2.2 安装过程 三、基础配置与优化 3.1 更新系统 3.2 配置防火墙 3.3 配置SELinux 3.4 系统监控与日志 四、网络配置与管理 4.1 配置静态IP 4.…

解决LineageOS提示网络受限问题

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 问题原因 由于 LineageOS 源码里默认是使用 google captive连接验证服务&#xff0c;所以国内会一直提示网络受限&#xff0c;但是实际上是可以访问网络的。 …

nginx安装及vue项目部署

安装及简单配置 在usr/local下建好nginx文件夹&#xff0c;下载好nginx-1.26.2.tar.gz压缩文件.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel gcc、gcc-c # 主要用来进行编译相关使用 openssl、ope…