触摸传感器使用顺序

1.初始化触摸传感器,

2.对触摸传感器和引脚进行配置,

3.启动FSM(有限状态机)

4.采集原始数据

5.卸载触摸传感器

初始化触摸传感器

![[Pasted image 20250519135238.png]]

FSM有限状态机

![[Pasted image 20250519135837.png]]

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

#include <stdio.h>
#include "freertos/FreeRTOS.h" // FreeRTOS 基础头文件
#include "freertos/task.h" // FreeRTOS 任务相关
#include "driver/touch_sensor.h" // ESP32 触摸传感器驱动头文件
#include "esp_log.h" // ESP 日志系统,用于打印调试信息

#define TAG "TOUCH" // 设置日志打印时的模块标签

void app_main(void)
{
// === 1. 初始化触摸传感器模块 ===
// 这一步会初始化 ESP32 内部所有触摸相关硬件资源
touch_pad_init();

// === 2. 配置某个触摸传感器通道 ===
// 这里只使用 TOUCH_PAD_NUM11(也就是 GPIO11)作为触摸输入
// 该函数会自动为此通道设置默认阈值
touch_pad_config(TOUCH_PAD_NUM11);

// === 3. 启动 FSM(有限状态机)处理机制 ===
// FSM 会定时触发触摸采样动作,由硬件内部实现
touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER); // 使用内部定时器方式采样
touch_pad_fsm_start(); // 启动触摸采样机制

// === 4. 循环读取触摸通道的原始电容值 ===
while (1)
{
uint32_t raw_data; // 存放读取到的原始值

// 读取指定触摸通道的原始电容值(未经过滤和计算)
touch_pad_read_raw_data(TOUCH_PAD_NUM11, &raw_data);

// 打印读取到的原始值,用于观察是否被触摸
ESP_LOGI(TAG, "原始值: %ld", raw_data);

// 延时 100 毫秒
vTaskDelay(pdMS_TO_TICKS(100));
}

// === 5. 停止 FSM 状态机(通常在程序退出前使用)===
touch_pad_fsm_stop();

// === 6. 卸载触摸传感器驱动,释放资源 ===
touch_pad_deinit();
}