触摸传感器
简介
触摸传感器系统由保护覆盖层、触摸电极、绝缘基板和走线组成,保护覆盖层位于最上层,绝缘基板上设有电极及走线。触摸覆盖层将引起电容变化,根据电容变化,可以判断此次触摸是否为有效触摸行为。
功能列表
功能概述
W803 集成了触摸传感器模块,工作时每隔一定时间逐次扫描每个触摸按键的状态,在设定的时间窗口内计数并记录下每个按键的状态。 如果超过设定的阈值,则判断该按键被触摸,通过轮询读取或者中断进行应用处理。
当前软件可调参数只有触摸阀值(调节范围:0-127),可根据实际环境调节得到一个最适合值。
W803 共有 10 个可用的 TOUCH 触摸引脚,两个控制引脚, 触摸传感器引脚的关系如下表
触摸传感器编号(名称) |
引脚编号 |
引脚名称 |
引脚复用功能 |
引脚属性 |
TOUCH3 |
PIN_NUM_16 |
PB0 |
OPT7 |
float/input |
TOUCH4 |
PIN_NUM_17 |
PB1 |
OPT7 |
float/input |
TOUCH5 |
PIN_NUM_18 |
PB2 |
OPT7 |
float/input |
TOUCH6 |
PIN_NUM_19 |
PB3 |
OPT7 |
float/input |
TOUCH7 |
PIN_NUM_20 |
PB4 |
OPT7 |
float/input |
TOUCH8 |
PIN_NUM_21 |
PB5 |
OPT7 |
float/input |
TOUCH9 |
PIN_NUM_22 |
PB6 |
OPT7 |
float/input |
TOUCH10 |
PIN_NUM_23 |
PB7 |
OPT7 |
float/input |
TOUCH11 |
PIN_NUM_24 |
PB8 |
OPT7 |
float/input |
TOUCH12 |
PIN_NUM_25 |
PB9 |
OPT7 |
float/input |
CMOD |
PIN_NUM_12 |
PA12 |
OPT7 |
float/input |
CDC |
PIN_NUM_14 |
PA14 |
OPT7 |
float/input |
触摸传感器电路设计参考如下表
触摸传感器可以以矩阵或滑条等方式组合使用,从而覆盖更大触感区域及更多触感点。
主要功能
初始化触摸传感器
使用触摸传感器前需要调用
wm_drv_touch_sensor_init()
函数初始化驱动。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor");
设置阈值
设置触摸传感器的阈值,可以调用
wm_drv_touch_sensor_set_threshold()
函数。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor"); wm_drv_touch_sensor_set_threshold(touch_dev, WM_TOUCH_SENSOR_NUM_1, 100);
获取阈值
获取触摸传感器的阈值,可以调用
wm_drv_touch_sensor_get_threshold()
函数。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor"); uint32_t threshold; wm_drv_touch_sensor_get_threshold(touch_dev, WM_TOUCH_SENSOR_NUM_1, &threshold);
读取计数
读取触摸传感器的计数值,可以调用
wm_drv_touch_sensor_read_countnum()
函数。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor"); uint32_t countnum; wm_drv_touch_sensor_read_countnum(touch_dev, 0, &countnum);
启动传感器
启动触摸传感器,可以调用
wm_drv_touch_sensor_start()
函数。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor"); wm_drv_touch_sensor_start(touch_dev, WM_TOUCH_SENSOR_NUM_1);
停止传感器
停止触摸传感器,可以调用
wm_drv_touch_sensor_stop()
函数。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor"); wm_drv_touch_sensor_stop(touch_dev, WM_TOUCH_SENSOR_NUM_1);
注册回调
注册触摸传感器的回调函数,可以调用
wm_drv_touch_sensor_register_callback()
函数。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor"); void touch_callback(wm_touch_sensor_num_t touch_num, void *priv) { } wm_drv_touch_sensor_register_callback(touch_dev, WM_TOUCH_SENSOR_NUM_1, touch_callback, NULL);
去初始化触摸传感器
不再需要使用触摸传感器时,可以调用
wm_drv_touch_sensor_deinit()
函数反初始化驱动,释放资源。示例:wm_device_t *touch_dev; touch_dev = wm_drv_touch_sensor_init("touch_sensor"); wm_drv_touch_sensor_deinit(touch_dev);
应用实例
使用 touch sensor 基本示例请参考: examples/peripheral/touch_sensor
API 参考
触摸按键 Touch Button
触摸滑条(暂未实现)
触摸矩阵按键(暂未实现)