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


前言

  • 本文介绍触摸按键控制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程序设计(五)按键中断+按键状态检测

要使用ArduinoTTP223触摸模块实现触摸开关LED的代码,您可以尝试以下示例: ```cpp const int TOUCH_PIN = 2; // 触摸引脚连接到数字引脚2 const int LED_PIN = 13; // LED引脚连接到数字引脚13 bool ledState = false; // LED状态,默认为关闭 void setup() { pinMode(LED_PIN, OUTPUT); // 设置LED引脚为输出模式 pinMode(TOUCH_PIN, INPUT_PULLUP); // 设置触摸引脚为输入模式,并启用上拉电阻 } void loop() { if (digitalRead(TOUCH_PIN) == LOW) { // 如果触摸引脚接地(被触摸) delay(50); // 延迟一小段时间以避免抖动 if (digitalRead(TOUCH_PIN) == LOW) { // 再次检查触摸引脚是否接地 ledState = !ledState; // 切换LED状态 digitalWrite(LED_PIN, ledState); // 设置LED引脚的电平 while (digitalRead(TOUCH_PIN) == LOW) {} // 等待手指离开触摸引脚 delay(200); // 延迟一段时间以避免重复触发 } } } ``` 在这个代码中,我们将触摸模块的输出引脚连接到Arduino的数字引脚2,将LED的正极连接到数字引脚13,负极连接到Arduino的地。 在`setup()`函数中,我们将LED引脚设置为输出模式,并将触摸引脚设置为输入模式,并启用上拉电阻。 在`loop()`函数中,我们使用`digitalRead()`函数检测触摸引脚的状态。如果触摸引脚被触摸(接地),我们会进行一系列操作: - 延迟一小段时间以避免抖动。 - 再次检查触摸引脚是否接地,以确认触摸事件。 - 如果是有效的触摸事件,我们将切换LED状态,并通过`digitalWrite()`函数设置LED引脚的电平。 - 等待手指离开触摸引脚。 - 延迟一段时间以避免重复触发。 这样,每次触摸模块时,LED的状态会切换一次。 请注意,如果您使用的是其他型号的触摸模块,可能需要根据其具体规格进行适当的调整。 希望能对您有所帮助!如果您有任何进一步的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值