ESP32学习笔记(五) 外部中断

本文介绍了ESP32芯片如何使用外部中断功能,特别是结合电容触摸传感器,通过API如`touchSetCycles`和`touchAttachInterrupt`来设置测量周期、读取触摸值以及设定中断阈值。电容触摸读取的值越小,表示触碰越明显。此外,还讨论了针对ESP32的中断阈值方向设置。
摘要由CSDN通过智能技术生成

ESP32学习笔记(五) 外部中断

目录:
ESP32学习笔记(一) 芯片型号介绍
ESP32学习笔记(二) 开发环境搭建 VSCode+platformio
ESP32学习笔记(三) 硬件资源介绍
ESP32学习笔记(四) 串口通信
ESP32学习笔记(五) 外部中断
ESP32学习笔记(六) 定时器
ESP32学习笔记(七) 复位和时钟

把电容触摸放在外部中断这里是因为 电容触摸也可以触发中断

1.电容触摸功能

1.1相关API

void touchSetCycles(uint16_t measure, uint16_t sleep);
touch_value_t touchRead(uint8_t pin);			//Read touch pad (values close to 0 mean touch detected)
void touchAttachInterrupt(uint8_t pin, void (*userFunc)(void), touch_value_t threshold);
void touchAttachInterruptArg(uint8_t pin, void (*userFunc)(void*), void *arg, touch_value_t threshold);
void touchDetachInterrupt(uint8_t pin);		//停止中断

#if SOC_TOUCH_VERSION_1     // Only for ESP32 SoC
void touchInterruptSetThresholdDirection(bool mustbeLower);		//设置是低于阈值 还是高于阈值 来触发isr  默认是低
#endif

我实际的测量值 如函数描述一样 较小的值表示触摸到

image-20230103221216148

ESP32是一款由Espressif Systems开发的低功耗微控制器芯片,它集成了Wi-Fi和蓝牙功能,非常适合物联网项目。ESP-IDF是Espressif官方的物联网开发框架,用于开发ESP32应用程序。使用ESP32外部中断可以通过以下步骤来完成: 1. 配置GPIO:首先需要配置一个GPIO为输入模式,并设置为中断触发方式,可以是上升沿、下降沿或者双边沿触发。 2. 定义中断服务例程(ISR):你需要定义一个中断服务例程函数,这个函数会在外部中断发生时被调用。 3. 注册中断:使用ESP-IDF提供的API将你的中断服务例程注册到指定的GPIO上。 4. 启用中断:在完成上述设置后,需要通过系统API启用中断,使能GPIO的中断功能。 以下是一个简单的代码示例来说明如何使用外部中断: ```c #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" #include "esp_intr_alloc.h" #define GPIO_INPUT_IO 0 #define GPIO_INPUT_PIN_SEL ((1ULL<<GPIO_INPUT_IO)) // 中断服务例程 void IRAM_ATTR gpio_isr_handler(void* arg) { uint32_t gpio_num = (uint32_t)arg; printf("GPIO[%d] intr, val: %d\n", gpio_num, gpio_get_level(gpio_num)); } void app_main() { // 配置GPIO为输入并启用上拉电阻 gpio_config_t io_conf; io_conf.intr_type = GPIO_INTR_POSEDGE; // 设置为上升沿触发 io_conf.mode = GPIO_MODE_INPUT; io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL; io_conf.pull_up_en = 1; gpio_config(&io_conf); // 注册中断服务例程 gpio_install_isr_service(0); gpio_isr_handler_add(GPIO_INPUT_IO, gpio_isr_handler, (void*)GPIO_INPUT_IO); // 启用中断 gpio_intr_enable(GPIO_INPUT_IO); } ``` 在上面的代码中,我们首先配置了GPIO_INPUT_IO为输入模式,并设置了中断触发类型为上升沿。然后定义了一个中断服务例程`gpio_isr_handler`,当GPIO_INPUT_IO检测到上升沿信号时,该例程会被调用。最后,我们通过`gpio_install_isr_service`安装了中断服务,并通过`gpio_isr_handler_add`添加了具体的中断处理函数,以及通过`gpio_intr_enable`启用了中断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值