_SKU_SEN0292__Multi_touch_control_panel多点触控板 - jimaobian/DFRobotWikiCn GitHub Wiki

[[File:产品样图.jpg|[https://ProductLink Product Name

Update/modify/delete Forbidden, 禁止更改本图,请更改图片名称新建图片,记得添加超链接

]]]

简介

这是一款基于电容感应的多点触摸控制面板,采用Gravity接口方式,板设五个触摸点([0],[1],[2],[3],[4]),各触摸点之间采用电阻分压技术,即人体触摸不同的点,将输出不同的电压值,例:触摸按键[0],输出电压约1.07V;触摸按键[1],输出电压约2.42V。支持多点同时触摸,可同时触摸2个(如同时触摸[0],[1]按键),3个,4个或5个按键,多达31种按键组合,每种组合都能输出不同的电压值,最大输出电压约为3V,此触控板只能在ADC电压参考值为3V及以上的MCU上使用。

特性

  • PH2.0-3接口
  • 模拟信号输出
  • 五个触摸点
  • 支持单多点输入
  • 31种按键组合

技术规格

  • 供电电压:3.3V~5.5V DC
  • 工作电流:1mA
  • 信号输出:模拟电压0~3V
  • 工作温度:-40℃~85℃
  • 接口类型:PH2.0-3P
  • 触摸芯片:BS806B
  • 产品尺寸:54×54 mm

引脚说明及尺寸

多点触控板

标号 名称 功能描述
+ VCC 电源正极(3.3~5.0V)
- GND 电源负极
A Analog 模拟输出

引脚说明

触摸按键组合及键值

该多点触控板的各种触摸按键组合的键值是在API函数库中定义的,若用户在编程中要用到下述键值,则必须使用DFRobot封的API函数库DFRobot_MultiTouchPad库

按键组合 按键键值 按键组合 按键键值
[0] 0x10 [0 1 3] 0x1A
[1] 0x08 [0 1 4] 0x19
[2] 0x04 [0 2 3] 0x16
[3] 0x02 [0 2 4] 0x15
[4] 0x01 [0 3 4] 0x13
[0 1] 0x18 [1 2 3] 0x0E
[0 2] 0x14 [1 2 4] 0x0D
[0 3] 0x12 [1 3 4] 0x0B
[0 4] 0x11 [2 3 4] 0x08
[1 2] 0x0C [0 1 2 3] 0x1E
[1 3] 0x0A [0 1 2 4] 0x11
[1 4] 0x09 [0 1 3 4] 0x1B
[2 3] 0x06 [0 2 3 4] 0x18
[2 4] 0x05 [1 2 3 4] 0x0F
[3 4] 0x03 [0 1 2 3 4] 0x1F
[0 1 2] 0x10 无按键触摸 0xFF

触摸按键组合及键值

warning_yellow.png
注:组合按键[1 2 3]和[0]的键值均为0x10;组合按键[0 1 2 4]和[0 4]的键值均为0x11;

API接口函数

触摸板部分接口函数说明,具体API说明请查看DFRobot_MultiTouchPad库介绍'''

  • 1.DFRobot_MultiTouchPad():

  构造函数,DFRobot_MultiTouchPad对象被创建时,自行调用。

  • 2.init(int analogPin):

  多点触控板初始化。analogPin为模拟端口号,可取A0~A5中的任意值,初始化成功返回1,失败返回0

  • 3.read(void):

  读取触控板输出电压的ADC采样值。返回值-1,读取失败;返回值0xFF,无按键被触摸;返回其他值,表示被触摸按键的键值,例:返回0x10,代表[0]键被触摸,返回0x18,表示键[0]和[1]被同时触摸等等。

  • 4.setOpenedKey(int key)和setOpenedKeyTime(int time):

  将触控板按键0,1,2,3,4中的某个按键为长按键,长按时间为time,单位秒。上述两个函数必须在一个demo中使用,且只能在setup中完成设置,不能在loop中使用。   例setOpenedKey(0)和setOpenedKeyTime(3)同时在setup中出现,即当用户触摸键[0]的时间达到3s后,触控板生效,将会执行loop里的语句,再次触摸键[0]达到3s后,   将会关闭触摸控制板,此时触摸其他键将没有反应。注:长按时间应大于或等于3s,且设置时间越长,误差越大。

  • 5.setButtonCombinationCallback(int buttonCombination, buttonCombinationCallback_t callback_handler):

  用户触摸某个按键组合buttonCombination,则调用相应的功能函数callback_handler。其中buttonCombination为按键的键值,callback_handler为用户自定义的功能   函数名。例:setButtonCombinationCallback(0x10,callback_handler),当用户触摸按键[0]时,将调用函数名为callback_handler的功能函数。注:目前该函数只支   持单点、双点和三点的组合按键。

使用教程

连接示意图

Arduino_Multi touch control panel

准备

硬件

  • 1 x UNO控制板
  • 1 x Multi touch control panel模块

软件

关于如何安装库文件,点击链接

示例代码

  • **示例一:**MCU检测到某个按键被触摸,则串口打印相应的字符串。当用户触摸按键[0]时,串口打印"button 0 touched";当用户同时触摸按键[0][1]时,串口打印"button 0&1 touched";当用户同时触摸按键[0][1][3]时,串口打印"button 0&1&3 touched";当用户同时触摸按键[0][1][2][3]时,串口打印"button 0&1&2&3 touched";当用户同时触摸按键[0][1][2][3][4]时,串口打印"button 0&1&2&3&4 touched";
#include "DFRobot_MultiTouchPad.h"
DFRobot_MultiTouchPad multiTouchPad;

void setup()
{
  Serial.begin(9600);//设置串口波特率
  Serial.println("Multi touch pad init.");
  while( !multiTouchPad.init(A0)){ //多点触控板初始化,成功返回1,失败返回0
    Serial.println("Please connect multi touch pad or choose real analog Pin or reset the board.");
    delay(1000);
  }
  Serial.println("Multi touch pad init OK.");
}

void loop()
{
  int touchNum = multiTouchPad.read();  //读取被触摸按键的键值
  if(touchNum==0x10)                    //如果检测到按键[0]被触摸,则执行串口打印语句
      Serial.println("button 0 touched");
  else if(touchNum==0x18)               //如果检测到组合按键[0][1]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1 touched");
  else if(touchNum==0x1A)               //如果检测到组合按键[0][1][3]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1&3 touched");
  else if(touchNum==0x1E)               //如果检测到组合物按键[0][1][2][3]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1&2&3 touched");
  else if(touchNum==0x1F)               //如果检测到组合按键[0][1][2][3][4]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1&2&3&4 touched");
  delay(50);
}

IDE串口提示信息

  • 示例二:使用回调函数setButtonCombinationCallback实现示例一中前3项的内容。
warning_yellow.png
注:setButtonCombinationCallback回调函数只支持单点、双点、三点的按键组合,不支持4或5点的,若用户要用4点或5点的组合按键,可以使用if语句来实现
#include "DFRobot_MultiTouchPad.h"
DFRobot_MultiTouchPad multiTouchPad;

void button_0_touch()
{
  Serial.println("button 0 touched");
}
void button_01_touch()
{
  Serial.println("button 0&1 touched");
}
void button_013_touch()
{
  Serial.println("button 0&1&3 touched");
}

void setup()
{
  Serial.begin(9600);//设置串口波特率
  Serial.println("Multi touch pad init.");
  while( !multiTouchPad.init(A0)){ //多点触控板初始化,成功返回1,失败返回0
    Serial.println("Please connect multi touch pad or choose real analog Pin or reset the board.");
    delay(1000);
  }
  Serial.println("Multi touch pad init OK.");
  multiTouchPad.setButtonCombinationCallback(0x10, button_0_touch);  //如果检测到按键[0]被触摸,则调用函数button_0_touch
  multiTouchPad.setButtonCombinationCallback(0x18, button_01_touch); //如果检测到按键[0][1]被同时触摸,则调用函数button_01_touch
  multiTouchPad.setButtonCombinationCallback(0x1A, button_013_touch);//如果检测到按键[0][1][3]被同时触摸,则调用函数button_013_touch
}

void loop()
{
  multiTouchPad.read();//读取被触摸按键的键值
  delay(50);
}

IDE串口提示信息

  • 示例三:示例一的基础上,添加一个长按键功能。例,当用户触摸按键"0"的时间达到3s后,打开触摸板,此时触摸按键[0]或[0][1]或[0][1][3]或[0][1][2][3]或[0][1][2][3][4]等按键组合,串口会打印相应的字符串,若用户再次触摸按键"0"的时间达到3s,则关闭触摸板,此时按上述组合键则无效。
warning_yellow.png
注:长按键设置功能只能用于setup函数中,不建议在loop函数中使用,即setOpenedKeyTime和setOpenedKey函数只能在setup中调用;
warning_yellow.png
注:示例三中按键[0]被设置为长按开关按键,此时若不用回调函数setButtonCombinationCallback,则无法再将[0]按键作为功能按键放于loop的if语句中

#include "DFRobot_MultiTouchPad.h"
DFRobot_MultiTouchPad multiTouchPad;//创建一个多点触控板对象

void button_0_touch()
{
  Serial.println("button 0 touched");
}
void setup()
{
  Serial.begin(9600);//设置串口波特率
  Serial.println("Multi touch pad init.");
  while( !multiTouchPad.init(A0)){ //多点触控板初始化,成功返回1,失败返回0
    Serial.println("Please connect multi touch pad or choose real analog Pin or reset the board.");
    delay(1000);
  }
  Serial.println("Multi touch pad init OK.");
  multiTouchPad.setButtonCombinationCallback(0x10, button_0_touch);  //如果检测到按键[0]被触摸,则调用函数button_0_touch

  multiTouchPad.setOpenedKeyTime(3);
  multiTouchPad.setOpenedKey(0);     //将按键[0]设置为长触摸3s开关,用户触摸按键[0]3s后,开启触摸板,再次长触摸[0]3s后,关闭触摸板
}

void loop()
{
  int touchNum = multiTouchPad.read();  //读取被触摸按键的键值
  if(touchNum==0x18)               //如果检测到组合按键[0][1]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1 touched");
  else if(touchNum==0x1A)               //如果检测到组合按键[0][1][3]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1&3 touched");
  else if(touchNum==0x1E)               //如果检测到组合物按键[0][1][2][3]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1&2&3 touched");
  else if(touchNum==0x1F)               //如果检测到组合按键[0][1][2][3][4]被同时触摸,则执行串口打印语句
      Serial.println("button 0&1&2&3&4 touched");
  delay(50);
}

IDE串口提示信息

疑难解答

更多

  • [ 原理图]

DFshopping_car1.png [Link DFRobot商城购买链接]