前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESP32 touchPad功能

ESP32 touchPad功能

作者头像
云深无际
发布2021-10-20 11:09:09
1.1K0
发布2021-10-20 11:09:09
举报
文章被收录于专栏:云深之无迹云深之无迹

我本来是一直在驱动别的输入传感器来当键盘的输入,但是我突然想到我为什么不可以做一个“任意”按键呢?结合以前看文档说,ESP32自带10个电容触摸GPIO。

T0:GPIO 4

T1:GPIO 0

T2:GPIO 2

T3:GPIO 15

T4:GPIO 13

T5:GPIO 12

T6:GPIO 14

T7:GPIO 27

T8:GPIO 33

T9:GPIO 32

这些引脚可以感应到任何带电物质的变化,比如人的皮肤,同时也可以方便的集成到电容垫里面。最后这个引脚也可以把芯片从深度休眠状态唤醒。

如果是Arduino开发,还有专门的语法touchpad使用

代码语言:javascript
复制
void setup()
{
    Serial.begin(115200);
    delay(1000); // give me time to bring up serial monitor
    Serial.println("ESP32 Touch Test");
}

void loop()
{
    Serial.println(touchRead(T0)); // get value using T0
    delay(1000);
}

最简单的demo,就是这样

代码语言:javascript
复制
int threshold = 40;
bool touch1detected = false;
bool touch2detected = false;

void gotTouch1()
{
    touch1detected = true;
}

void gotTouch2()
{
    touch2detected = true;
}

void setup()
{
    Serial.begin(115200);
    delay(1000); // give me time to bring up serial monitor
    Serial.println("ESP32 Touch Interrupt Test");
    touchAttachInterrupt(T2, gotTouch1, threshold);
    touchAttachInterrupt(T3, gotTouch2, threshold);
}

void loop()
{
    if (touch1detected)
    {
        touch1detected = false;
        Serial.println("Touch 1 detected");
    }
    if (touch2detected)
    {
        touch2detected = false;
        Serial.println("Touch 2 detected");
    }
}

如果只有简单读取,响应的代码就太low了,上面是用按键的中断来实现的。

中断很适合执行那些需要不断检查的工作,比如检查一个引脚上连接的按键开关是否被按下。中断更适用于很快就会消失的信号检查,比如某一个引脚用于检测脉冲信号,这个脉冲信号的持续时间可能十分短暂。如果不使用中断,那么假如Arduino开发板正在执行其它任务时,突然这个脉冲信号来了,还不等Arduino开发板完成正在执行的工作,这个脉冲信号可能就已经消失了。而使用中断,就可以确保这个转瞬即逝的脉冲信号可以很好的被Arduino开发板检测到并执行相应任务。

大致语法

代码语言:javascript
复制
touchAttachInterrupt(T0, gotTouch, 40);
//其中40为阈值,当通道T0上的值<40时,会触发中段

这样使用也是准确的

代码语言:javascript
复制
void attachInterrupt(uint8_t pin, std::function<void(void)> intRoutine, int mode)
{
  // use the local interrupt routine which takes the ArgStructure as argument
  __attachInterruptFunctionalArg (pin, (voidFuncPtrArg)interruptFunctional, new InterruptArgStructure{intRoutine}, mode, true);
}

这是我们ESP32的触摸中断语法,然后这个触摸的mode嘛。因为原理只能是下降沿。

注意,ESP32芯片的引脚可以映射

但是注意这个触摸脚是专用的,别瞎映射

我其实想逼逼,有映射功能,但是用起来这不行那不行

代码语言:javascript
复制
https://docs.espressif.com/projects/arduino-esp32/en/latest/boards/ESP32-DevKitC-1.html?highlight=touch

具体的也可以看看这各链接。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档