当前位置:   article > 正文

《ESP32 学习笔记》 之Arduino环境下 触摸按键-Touch 检测_touchread

touchread

1.简介

在 Arduino环境下,我们如何用 ESP32的触摸按键 功能 ?

Touch 就像 ADC 检测一样,很玄学,可以用来解决一些很神奇的问题,比如全国电赛中纸张数目检测的题目,就可以根据ADC检测的电压值来判断纸张数目。

在本次实验中,我们使用了源文件:esp32-hal-touch.h 和 esp32-hal-touch.c  

esp32-hal-touch.h源文件:

  1. /*
  2. * Set cycles that measurement operation takes
  3. * The result from touchRead, threshold and detection
  4. * accuracy depend on these values. Defaults are
  5. * 0x1000 for measure and 0x1000 for sleep.
  6. * With default values touchRead takes 0.5ms
  7. * */
  8. void touchSetCycles(uint16_t measure, uint16_t sleep);
  9. /*
  10. * Read touch pad (values close to 0 mean touch detected)
  11. * You can use this method to chose a good threshold value
  12. * to use as value for touchAttachInterrupt
  13. * */
  14. uint16_t touchRead(uint8_t pin);
  15. /*
  16. * Set function to be called if touch pad value falls
  17. * below the given threshold. Use touchRead to determine
  18. * a proper threshold between touched and untouched state
  19. * */
  20. void touchAttachInterrupt(uint8_t pin, void (*userFunc)(void), uint16_t threshold);

 注:支持 Touch 功能的引脚请查看:引脚定义,查找对应引脚的Touch通道。

2.硬件平台

安信可 NODEMCU-32S 开发板:

3.软件平台

Arduino (1.8.10)     或     VScode 环境下 PlatformIO 插件

4.示例程序

在测试时,可以给 ESP32 的引脚上插上一根 公对母杜邦线 ,使用时,用 手触摸杜邦线的公头端即可。

4.1 直接读取触摸引脚值

  1. /**
  2. * 时间:2020/5/18
  3. * 作者:刘泽文
  4. * 功能:使用ESP32的触摸按键
  5. */
  6. #include <WiFi.h>
  7. void setup() {
  8. Serial.begin(115200);
  9. delay(1000);
  10. Serial.println("Starting Touch work!");
  11. }
  12. void loop() {
  13. Serial.println(touchRead(T0)); // Touch0 通道是 GPIO 4.
  14. delay(30);
  15. }

4.2 触摸按键中断

  1. /**
  2. * 时间:2020/5/18
  3. * 作者:刘泽文
  4. * 功能:使用ESP32的触摸按键中断
  5. */
  6. #include <WiFi.h>
  7. #define LED 2
  8. bool LED_st = true;
  9. void gotTouch(){
  10. delay(10);
  11. LED_st = !LED_st;
  12. }
  13. void setup() {
  14. Serial.begin(115200);
  15. delay(1000);
  16. Serial.println("ESP32 Touch Interrupt Test");
  17. pinMode(LED,OUTPUT);
  18. digitalWrite(LED,HIGH);
  19. touchAttachInterrupt(T0, gotTouch, 40);//其中40为阈值,当通道T0上的值<40时,会触发中断
  20. }
  21. void loop(){
  22. delay(300);
  23. digitalWrite(LED,LED_st);//状态反转
  24. }

5.总结

在日常使用中,可以先使用 touchRead(T0) 来确定 touchAttachInterrupt() 的阈值,Touch 的作用很多,还需进一步探索。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/431295
推荐阅读
相关标签
  

闽ICP备14008679号