Arduino程序设计(十三)触摸按键实验(TTP223)

2023-09-22 16:05:22


前言

  • 本文介绍触摸按键控制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 13

bool 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 13

OneButton 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");
  else
    Serial.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程序设计(五)按键中断+按键状态检测

更多推荐

springboot+canal+mysql+redis缓存双写一致性

canal官网地址:https://github.com/alibaba/canal/wiki/QuickStart基本上按照官网的步骤来就行准备首先服务器上要安装好jdk,因为canal运行需要jdk,同时把canal对应的端口在服务中开放,否则连接不上对于自建MySQL,需要先开启Binlog写入功能,配置binl

【面试刷题】——堆栈窗口

“堆栈窗口”(StackWindow)通常不是一个特定的编程术语,但可以用来描述在编程和计算机科学领域中一些相关的概念。这些概念涉及到堆栈(stack)和窗口(window)等术语的组合。以下是一些可能涉及到的相关概念:堆栈窗口管理(StackWindowManagement):这是一种用于管理用户界面(UI)中不同窗

【Vue】模块基本语法「上篇」

【Vue】模块基本语法「上篇」一、插值1.1文本1.2v-html1.3数据双向绑定(v-model)二、指令2.1v-if|v-else|v-else-if2.2v-show2.3v-for2.4动态参数三、过滤器3.1局部过滤器3.2全局过滤器四、计算属性&监听属性4.1计算属性4.2监听属性五、案例实操5.1购物

嵌入式MCU都有什么高级用法?

嵌入式MCU都有什么高级用法?您举的几个例子,确实是MCU外设的一些高端玩法。只是不知道您是否想过,既然这些机制是被人设计出来的,那它就是种标准用法。从微控制器的发展历程来看,许多硬件机制都是有了实际需求后才添加进来,比如接收不定长数据,最初没有超时中断的情况下只能软件实现,极大的浪费最近很多小伙伴找我,说想要一些嵌入

Vue的进阶使用--模板语法应用

目录前言一.Vue的基础语法1.插值1.1文本插值1.2HTML插值1.3属性插值1.4Vue演示三元条件运算2指令2.1if&&else指令(v-if/v-else-if/v-else)2.2v-for指令2.3v-on指令(动态参数)2.4知识点补充之v-if与v-show的区别3.过滤器3.1局部过滤器3.2全局

什么是领域驱动设计(DDD): 领域驱动设计和实践如何做

引言软件系统面向对象的设计思想可谓历史悠久,20世纪70年代的Smalltalk可以说是面向对象语言的经典,直到今天我们依然将这门语言视为面向对象语言的基础。随着编程语言和技术的发展,各种语言特性层出不穷,面向对象是大部分语言的一个基本特性,像C++、Java、C#这样的静态语言,Ruby、Python这样的动态语言都

关于物联网技术的水电厂电气开关柜测温系统设计应用

摘要:针对洪江水电厂电气开关柜温度无法在线监测的问题,本文提出了一种基于物联网技术的水电厂开关柜温度测量系统。该系统部署简单高效,能快速采集设备温度数据,通过4G或者WiFi无线信号将数据送入物联网云平台,实现开关柜温度远程实时监测,为开关柜状态诊断提供决策依据。此外,该系统解决了人工巡检成本高、数据及时率低、作业风险

PostgreSQL如何支持PL/Python过程语言

瀚高数据库目录环境文档用途详细信息环境系统平台:Linuxx86-64RedHatEnterpriseLinux7版本:10.4文档用途本文档主要介绍PostgreSQL如何支持PL/Python过程语言,如何创建plpython扩展。详细信息一、PostgreSQL支持python语言的前提条件1、本地必须安装pyt

Twitter优化秘籍:置顶、列表、受众增长

在Twitter上,将你的一条推送文置顶到个人数据顶部是提高可见性和吸引关注者的绝佳方式。无论你是个人用户还是企业,此功能都可以让你的重要信息常驻在众人眼前,即使你发布了新的推文。接下来,我们将分享一些优化建议,帮助你合理地使用此功能。1、置顶要点:你可以使用置顶功能来展示人们需要看到的重要信息,比如:限时促销:如果您

C/C++内存管理

文章目录1.C/C++内存分布2.C语言中动态内存管理方式:malloc/calloc/realloc/free3.C++内存管理方式new/delete3.1new/delete操作内置类型3.2new/delete操作自定义类型4.operatornew和operatordelete函数(重点)4.1底层原理5.m

探讨大型公共建筑能耗监测与信息管理系统研究及应用

安科瑞华楠摘要:文章通过阐述大型公共建筑能耗现状,突出大型公共建筑实施节能监管的必要性,并在系统总结运用技术手段实施建筑能耗监测的基础上,介绍了江苏省建筑能耗监测系统研究过程中的技术创新和应用情况。关键词:公共建筑;建筑能耗;监测;节能0前言为随着我国工业化和城市化进程的加速,高速发展的建筑业以及不断扩大的建筑规模使得

热文推荐