4-2-外部中断信号控制灯光开关
如果手头只有ESP32标准开发板(包括S3,C3等等)
建议可以参考教程:ESP32的电容Touch和外部中断
可以利用ESP32自带的电容触摸产生中断控制开发板板载LED亮灭即可。
实训项目:外部中断信号控制灯光开关
编写Arduino程序,在蓝蜻蜓ESP32物联网开发平台上,完成以下的功能:
- 模块连接
- 插上GM31模块,将蓝蜻蜓ESP32的15针扩展口U3中的GPIO19和GPIO5短接。
- 串口初始化
- 初始化UART0的串口,波特率为115200。
- 方波信号输出
- GPIO19引脚循环输出周期为2秒的方波,输入到GPIO5引脚,作为外部中断信号源。
- 外部中断设置
- GPIO5引脚定义为外部中断引脚,下降沿触发,绑定中断回调函数
service_exit5()。
- GPIO5引脚定义为外部中断引脚,下降沿触发,绑定中断回调函数
- 中断处理函数
- 定义一个全局的整型变量
num,在service_exit5()中:- 首先,对
num进行加1累计; - 然后,串口0打印输出字符串,统计中断执行的次数:“The count of Exit5:xx”;
- 接着,翻转开发板上D3灯的开关状态。
- 首先,对
- 定义一个全局的整型变量
- 代码编译与观察
- 编译下载代码,观察灯光的翻转变化和串口的输出信息。
思考
- 将外部中断信号触发方式改为“电平改变CHANGE”,灯光切换有什么改变?
外部中断程序设计关键

程序代码
#include <Arduino.h>
#define d3 14
int num = 0;
void Service_Exit5()
{
num++;
Serial.printf("THE Count of Exit5: %d",num);
Serial.println();
digitalWrite(d3,!digitalRead(d3));
}
void Send_Plus()
{
digitalWrite(19,!digitalWrite(19));
delay(1000);
}
void setup()
{
Serial.begin(115200);
pinMode(d3,OUTPUT);
pinMode(19,OUTPUT);
attachInterrupt(5,Service_Exit5,FALLING);
}
void loop()
{
Send_Plus();
}

浙公网安备 33010602011771号