ESP32 touchPad功能

我本来是一直在驱动别的输入传感器来当键盘的输入,但是我突然想到我为什么不可以做一个“任意”按键呢?结合以前看文档说,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使用

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,就是这样

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开发板检测到并执行相应任务。

大致语法

touchAttachInterrupt(T0, gotTouch, 40);//其中40为阈值,当通道T0上的值<40时,会触发中段

这样使用也是准确的

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芯片的引脚可以映射

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

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

https://docs.espressif.com/projects/arduino-esp32/en/latest/boards/ESP32-DevKitC-1.html?highlight=touch

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

(0)

相关推荐