极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23626|回复: 4

Arduino学习笔记A17 - Arduino连接TTP229B电容触摸模块

[复制链接]
发表于 2015-6-29 16:24:17 | 显示全部楼层 |阅读模式
本帖最后由 Ansifa 于 2015-6-30 16:20 编辑

Arduino连接TTP229B电容触摸模块


新买一个TTP229B的16键触摸模块,黑心淘宝居然没给对PDF也没有借鉴的驱动代码,于是去官网下载了个pdf看时序图模仿了一个。
先上pdf文件
这个是TTP-229B(SSOP-28)的PDF,来自官网
http://www.tontek.com.tw/031-1-1.asp?p3id=20141007154716

硬件部分:
首先看文档调好跳线,其中1脚对应TP0,2脚对应TP1如此类推,把1/2/3/4/5跳线跳上,即TP0-TP4均为低电平0
含义如下:
TP0=0,TP1=0:SDA高电平激活

TP2=0:16按键全使用
TP3=0,TP4=0:所有按键Multi Key,即可以同时按下所有按键。


下面是跳好跳线的图片


一定要把模块的1-5跳线跳好,否则下面代码不能正常读取。


两个代码,一个是单独读一个按键,一个一次读完所有按键


一个是单独读一个按键
[pre lang="arduino" line="1" file="TTP229Single.ino"]
int SCLPin = A5, SDOPin = A4;   //SCL接A5,SDO接A4,非IIC,可以随意移动引脚接法
boolean h = 0, oldh = 0;
void setup()
{
  Serial.begin(9600);
  pinMode(SCLPin , OUTPUT);   //时钟端输出
}

boolean ttp229single(int pin)
{
  boolean DATA = 0;
  pinMode(SDOPin , OUTPUT);
  digitalWrite(SDOPin, HIGH);
  delayMicroseconds(93);    //DV时间93us
  digitalWrite(SDOPin, LOW);
  delayMicroseconds(10);    //Tw时间10us
  pinMode(SDOPin , INPUT);
  for (int i = 0; i < 16; i++)
  {
    digitalWrite(SCLPin, HIGH);
    digitalWrite(SCLPin, LOW);
    if (i == pin-1)
    {
      DATA = digitalRead(SDOPin);    //读取数据
    }
  }
  delay(2);    //Tout时间2ms
  return DATA;
}

void loop()
{
  h = ttp229single(3);    //本例读了写着3数字的触摸键(TP2)

  if (h != oldh)    //数据改变的时候输出h
  {
    Serial.println(h);
    oldh = h;
    delay(40);      //满足pdf的T_resp(for 16-KEYS)时间32ms
  }
}

[/code]

一个一次读完所有按键
[pre lang="arduino" line="1" file="TTP229.ino"]int SCLPin = A5, SDOPin = A4;
unsigned int h = 0, oldh = 0;
void setup()
{
  Serial.begin(9600);
  pinMode(SCLPin , OUTPUT);   //时钟端输出
}

unsigned int ttp229()     //一次读完TTP229所有按键
{
  unsigned int DATA = 0;
  pinMode(SDOPin , OUTPUT);
  digitalWrite(SDOPin, HIGH);
  delayMicroseconds(93);
  digitalWrite(SDOPin, LOW);
  delayMicroseconds(10);
  pinMode(SDOPin , INPUT);
  for (int i = 0; i < 16; i++)
  {
    digitalWrite(SCLPin, HIGH);
    digitalWrite(SCLPin, LOW);
    DATA |= digitalRead(SDOPin) << i;
  }
  delay(2);
  return DATA&0xFFFF;
}

void loop()
{
  h = ttp229();
  if (h != oldh)
  {
    Serial.println(h, BIN);
    oldh = h;
    delay(40);
  }
}
[/code]


进阶阅读:代码与时序图关系简述

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-6-29 16:39:04 | 显示全部楼层
啥时候驱动一个手机的触摸屏玩玩?估计 iic总线和中断
回复 支持 反对

使用道具 举报

发表于 2015-7-1 07:44:24 | 显示全部楼层
漂亮,学习并收藏。
回复 支持 反对

使用道具 举报

发表于 2015-7-1 18:03:03 | 显示全部楼层
老板好久没发帖了
回复 支持 反对

使用道具 举报

发表于 2015-11-9 16:27:22 | 显示全部楼层
楼主?会不会用TTP229LSF????我那16键模式有问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 03:43 , Processed in 0.039733 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表