ESP32的电容Touch和外部中断
一、主程序代码
#include <Arduino.h>
// 定义外部中断的 mode
// 0:无中断,读取touch值
// 1:touch中断,执行TouchEvent()
// 2: 外部IO口的中断
#define EXT_ISR_MODE 2
void TouchEvent() // Touch 触发中断函数
{
Serial.printf("Touch Event.\r\n");
}
void PinIntEvent() // 外部(按键) 触发外部中断
{
Serial.printf("Touch Event.\r\n");
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); // 初始化串口及波特率
#if 1 == EXT_ISR_MODE
// Pin T0(GPIO4), 函数指针:TouchEvent,阈值:40
touchAttachInterrupt(T0, TouchEvent, 40);
#elif 2 == EXT_ISR_MODE
// 触发外部中断
pinMode(0, INPUT_PULLUP);
attachInterrupt(0, PinIntEvent, FALLING);
#endif
}
void loop() {
// put your main code here, to run repeatedly:
#if 0 == EXT_ISR_MODE
Serial.printf("Touch:%d\r\n", touchRead(T0));
#endif
}
二、程序介绍
1. 外部中断模式宏定义介绍#define EXT_ISR_MODE 2
- // 定义外部中断的 mode
- // 0:无中断,读取touch值 串口发送值
- // 1:touch中断,执行TouchEvent()
- // 2: 外部IO口的中断
2. Touch触发中断 初始化函数touchAttachInterrupt(T0, TouchEvent, 40);
该函数在setup()
中声明,有三个参数
- 第1个参数:T0 是指Touch引脚为T0(GPIO4)
- 第2个参数:TouchEvent 为该中断服务函数
- 第3个参数:40 为阈值 当
touchRead()
<40时候就会触发该中断
3. 普通的外部中断 初始化函数attachInterrupt(0, PinIntEvent, FALLING);
该函数在setup()
中声明,有三个参数
- 第1个参数:0 是指GPIO0 (此引脚为BOOT引脚,下载程序时须为高电平,程序正常运行过程中可以为低电平)
- 第2个参数:PinIntEvent 为该中断服务函数名称
- 第3个参数:FALLING 为该外部中断触发方式为下降沿触发
注:在使用外部中断时,需要提前定义为输入模数(上下拉)
4. touchRead(T0)
Touch的读函数
通常悬空时候数值为110左右,手指触摸会下降到10左右。