赞
踩
在 Arduino环境下,我们如何用 ESP32的触摸按键 功能 ?
Touch 就像 ADC 检测一样,很玄学,可以用来解决一些很神奇的问题,比如全国电赛中纸张数目检测的题目,就可以根据ADC检测的电压值来判断纸张数目。
在本次实验中,我们使用了源文件:esp32-hal-touch.h 和 esp32-hal-touch.c
esp32-hal-touch.h源文件:
- /*
- * Set cycles that measurement operation takes
- * The result from touchRead, threshold and detection
- * accuracy depend on these values. Defaults are
- * 0x1000 for measure and 0x1000 for sleep.
- * With default values touchRead takes 0.5ms
- * */
- void touchSetCycles(uint16_t measure, uint16_t sleep);
-
- /*
- * Read touch pad (values close to 0 mean touch detected)
- * You can use this method to chose a good threshold value
- * to use as value for touchAttachInterrupt
- * */
- uint16_t touchRead(uint8_t pin);
-
- /*
- * Set function to be called if touch pad value falls
- * below the given threshold. Use touchRead to determine
- * a proper threshold between touched and untouched state
- * */
- void touchAttachInterrupt(uint8_t pin, void (*userFunc)(void), uint16_t threshold);
注:支持 Touch 功能的引脚请查看:引脚定义,查找对应引脚的Touch通道。
安信可 NODEMCU-32S 开发板:
Arduino (1.8.10) 或 VScode 环境下 PlatformIO 插件
在测试时,可以给 ESP32 的引脚上插上一根 公对母杜邦线 ,使用时,用 手触摸杜邦线的公头端即可。
- /**
- * 时间:2020/5/18
- * 作者:刘泽文
- * 功能:使用ESP32的触摸按键
- */
- #include <WiFi.h>
-
- void setup() {
- Serial.begin(115200);
- delay(1000);
- Serial.println("Starting Touch work!");
-
- }
-
- void loop() {
- Serial.println(touchRead(T0)); // Touch0 通道是 GPIO 4.
- delay(30);
- }
- /**
- * 时间:2020/5/18
- * 作者:刘泽文
- * 功能:使用ESP32的触摸按键中断
- */
- #include <WiFi.h>
-
- #define LED 2
-
- bool LED_st = true;
-
- void gotTouch(){
- delay(10);
- LED_st = !LED_st;
- }
-
- void setup() {
- Serial.begin(115200);
- delay(1000);
- Serial.println("ESP32 Touch Interrupt Test");
- pinMode(LED,OUTPUT);
- digitalWrite(LED,HIGH);
- touchAttachInterrupt(T0, gotTouch, 40);//其中40为阈值,当通道T0上的值<40时,会触发中断
- }
-
- void loop(){
- delay(300);
- digitalWrite(LED,LED_st);//状态反转
- }
在日常使用中,可以先使用 touchRead(T0) 来确定 touchAttachInterrupt() 的阈值,Touch 的作用很多,还需进一步探索。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。