[[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上使用。

特性

技术规格

引脚说明及尺寸

多点触控板

标号 名称 功能描述
+ 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库介绍'''

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

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

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

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

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

使用教程

连接示意图

Arduino_Multi touch control panel

准备

硬件

软件

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

示例代码

#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串口提示信息

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串口提示信息

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商城购买链接]