新买一个TTP229B的16键触摸模块,黑心淘宝居然没给对PDF也没有借鉴的驱动代码,于是去官网下载了个pdf看时序图模仿了一个。
先上pdf文件
TTP229-BSF_V1.1_EN.pdf
(326.25 KB, 下载次数: 37)
这个是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跳线跳好,否则下面代码不能正常读取。
两个代码,一个是单独读一个按键,一个一次读完所有按键
一个是单独读一个按键
- 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
- }
- }
复制代码
一个一次读完所有按键
- 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);
- }
- }
复制代码
进阶阅读:代码与时序图关系简述
|