触摸按键实验
- 前言
- 一、TTP223触摸按键模块
- 二、触摸按键控制LED
- 二、触摸按键状态检测
前言
- 本文介绍触摸按键控制LED的原理及实验,主要内容有:
- 1、介绍TTP223触摸按键模块;
- 2、触摸按键控制LED;
- 3、触摸按键状态检测。
一、TTP223触摸按键模块
- 1、模块介绍:
- 该模块是一个基于触摸检测IC(TTP223B)的电容式点动型触摸开关模块。常态下,模块输出低电平,模式为低功耗模式;当用手指触摸相应位置时,模块会输出高电平,模式切换为快速模式;当持续12秒没有触摸时,模式又切换为低功耗模式。可以将模块安装在非金属材料如塑料、玻璃的表面,另外将薄薄的纸片(非金属)覆盖在模块的表面,只要触摸的位置正确,即可做成隐藏在墙壁、桌面等地方的按键。该模块可以让你免除常规按压型按键的烦恼。
- 2、模块特性:
- 3、模块参数:
二、触摸按键控制LED
-
(1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
-
(2)触摸按键控制LED的电路图,如下图所示:
-
(3)实现功能:触摸按键控制LED灯,触摸时,LED点亮,不触摸时,LED熄灭。
代码实现:
//TTP223电容式触摸按键实验
//触摸按键控制LED灯,触摸时,LED点亮,不触摸,LED熄灭
//机械按键需要消抖,触摸按键灵敏度高不需要消抖#define TOUCH 7
#define LED 13bool TOUCH_state = 0;void setup()
{pinMode(TOUCH, INPUT);pinMode(LED, OUTPUT);digitalWrite(LED, LOW);
}void loop()
{TOUCH_state = digitalRead(TOUCH);if (TOUCH_state == 1){digitalWrite(LED, HIGH);}else{digitalWrite(LED, LOW);}
}
-
(4)实现现象:
-
① 不触摸时
-
② 触摸时
注意:图中红色箭头位置为D13引脚对应的LED灯。
二、触摸按键状态检测
-
(1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
-
(2)触摸按键状态检测的电路图,如下图所示:
-
(3)实现功能:
-
① 触摸按键单击时,LED亮100ms后熄灭(闪烁一次),串口打印"singleclick";
-
② 触摸按键双击时,LED亮300ms,熄灭300ms,然后,LED亮300ms,熄灭300ms(闪烁两次),串口打印"doubleclick";
-
③ 触摸按键长按时,第一次长按,LED常亮,串口打印"longclick"和"start",第二次长按,LED熄灭,串口打印"longclick"和"end"。
-
(4)注意:编译代码前,需要下载安装OneButton库文件,并在程序中添加 #include <Arduino.h> 和 #include <OneButton.h> 两个头文件 。
//触摸按键单击、双击、长按的状态检测实验
/*实验现象:① 触摸按键单击时,LED亮100ms后熄灭(闪烁一次),串口打印"singleclick";② 触摸按键双击时,LED亮300ms,熄灭300ms,然后,LED亮300ms,熄灭300ms(闪烁两次),串口打印"doubleclick";③ 触摸按键长按时,第一次长按,LED常亮,串口打印"longclick"和"start",第二次长按,LED熄灭,串口打印"longclick"和"end"。*/#include <Arduino.h>
#include <OneButton.h>#define PIN_INPUT 7
#define PIN_LED 13OneButton button(PIN_INPUT, false);//单击
void click()
{Serial.println("singleclick");for (size_t i = 0; i < 2; i++){digitalWrite(PIN_LED, !digitalRead(PIN_LED));delay(100);}
}//双击
void doubleclick()
{Serial.println("doubleclick");for (size_t i = 0; i < 4; i++){digitalWrite(PIN_LED, !digitalRead(PIN_LED));delay(300);}
}//长按
void longclick()
{Serial.println("longclick");digitalWrite(PIN_LED, !digitalRead(PIN_LED));if (digitalRead(PIN_LED))Serial.println("start");elseSerial.println("end");
}void setup()
{Serial.begin(115200);//打开串口pinMode(PIN_LED, OUTPUT);//设置LED引脚为输出模式button.attachClick(click);//关联单击事件button.attachDoubleClick(doubleclick);//关联双击事件button.attachLongPressStart(longclick);//关联长按事件
}
void loop()
{button.tick();//按键扫描delay(10);
}
- (5)实现现象(部分显示):
- 说明:
- 1、上图为第一次长按后,串口打印"longclick"和"start",同时D13对应的LED点亮;
- 2、图中红色箭头对应的分别是串口打印界面和D13引脚连接的LED灯。
参考资料1: 【雕爷学编程】Arduino动手做(13)—TTP223B电容式触摸按键模块代码编程+仿真编程+图形编程的三合一测试
参考资料2: 「雕爷学编程」Arduino动手做(13)——触摸开关模块
参考资料3: Arduino程序设计(五)按键中断+按键状态检测