_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 |
触摸按键组合及键值
注:组合按键[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的功能函数。注:目前该函数只支
持单点、双点和三点的组合按键。
使用教程
连接示意图
准备
硬件
- 1 x UNO控制板
- 1 x Multi touch control panel模块
软件
- Arduino IDE, 点击下载Arduino IDE
- DFRobot_MultiTouchPad库
- [http://wiki.dfrobot.com.cn/index.php?title=Arduino%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B点击查看]arduino使用教程
关于如何安装库文件,点击链接
示例代码
- **示例一:**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);
}
- 示例二:使用回调函数setButtonCombinationCallback实现示例一中前3项的内容。
注: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);
}
- 示例三:在示例一的基础上,添加一个长按键功能。例,当用户触摸按键"0"的时间达到3s后,打开触摸板,此时触摸按键[0]或[0][1]或[0][1][3]或[0][1][2][3]或[0][1][2][3][4]等按键组合,串口会打印相应的字符串,若用户再次触摸按键"0"的时间达到3s,则关闭触摸板,此时按上述组合键则无效。
注:长按键设置功能只能用于setup函数中,不建议在loop函数中使用,即setOpenedKeyTime和setOpenedKey函数只能在setup中调用; |
注:示例三中按键[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);
}
疑难解答
更多
- [ 原理图]
[Link DFRobot商城购买链接]