OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5870|回复: 8

触摸按键问题 之 按着“触摸按键TPAD”,然后按复位键,之后松开,则触摸按键失灵

[复制链接]

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
发表于 2014-10-15 20:34:40 | 显示全部楼层 |阅读模式
触摸按键问题  之 按着“触摸按键TPAD”,然后按复位键,之后松开,则触摸按键失灵
这两天研究了下触摸按键,看完原子哥的“STM32开发指南”发现这么个问题: 按着“触摸按键TPAD”,然后按复位键,之后松开,则触摸按键会失灵。研究了下原子哥的程序,发现
[mw_shl_code=c,true]u8 TPAD_Init() { u16 buf[10]; u16 temp; u8 j,i; TIM5_CH2_Cap_Init(TPAD_ARR_MAX_VAL,SystemCoreClock/1000000-1); for(i=0;i<10;i++)// { buf=TPAD_Get_Val(); delay_ms(10); } for(i=0;i<9;i++)// { for(j=i+1;j<10;j++) { if(buf>buf[j])// { temp=buf; buf=buf[j]; buf[j]=temp; } } } temp=0; for(i=2;i<8;i++)temp+=buf; tpad_default_val=temp/6; printf("tpad_default_val:%d\r\n",tpad_default_val); if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1; return 0; }[/mw_shl_code]
TPAD_Init()这个函数中最后一句if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;这里有个小问题:我正常复位时串口打印的值为tpad_default_val:79
按着“触摸按键TPAD”,然后按复位键,之后松开,发现串口打印的值为 tpad_default_val:4107  ,而TPAD_ARR_MAX_VAL/2的值为32767,远大于4170,,所以if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;  这条语句永远都不执行。
     为解决这个问题,我将上句该为if(tpad_default_val>TPAD_ARR_MAX_VAL/20)return 1;  并 在主函数里的TPAD初始化处做了如下修改:

我把原来的初始化程序TPAD_Init(); //初始化TPAD修改为while(TPAD_Init()) delay_ms(10);//如果TPAD_Init()返回值为1,则说明触摸按键初始化失败,一直等待到初始化成功为止,否则不会往下继续执行主函数

这里也谢谢原子哥
------------------------完-----------------------完----------------------------

我会好好努力的!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-15 23:08:08 | 显示全部楼层
谢谢分享。
我们例程在复位后会自动重新计算tpad_default_val的值,所以,刚复位的时候,TPAD最好是空载状态。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
 楼主| 发表于 2014-10-16 18:51:01 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这只是个小问题,应该没几个人会注意到,其实也就在原程序基础上改动了两处。

谢谢原子哥百忙中回复!
我会好好努力的!
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-3-19
在线时间
29 小时
发表于 2014-10-23 14:14:46 | 显示全部楼层

此函数为TPAD初始化函数,即是获取空载时的时间值,越小越趋于正常。初始化成功,即返回“0”,if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1,该语句作为异常判断,正常情况是不会执行的,不存在任何问题。楼主的理解偏离了程序的意图。
关于:按着“触摸按键TPAD”,然后按复位键,之后松开,则触摸按键失灵,这个问题的确存在。但楼主的改法没有意义,和IF条件句无关。不过加上对初始化成功与否的判断是个不错的想法,可再向串口打印结果来分析更好。
如下是我调试的结果,287(326)以上是灵敏的数据,以下是按复位失灵后的数据。一般情况复位的时候是不做其他动作的。


永远不要让别人来告诉你,你不会做什么,一旦那样,你就失去了自身的意义。你总是要提前准备好别人想不到的事情,一旦机遇来临,你就赢得了先机。
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-3-19
在线时间
29 小时
发表于 2014-10-23 14:33:41 | 显示全部楼层
 补充:上图的数据是按照楼主的改法得到的,一样不灵敏。
初始化分析: 
while(TPAD_Init(72));
delay_ms(10);
printf("Init Reasult:%d\r\n",TPAD_Iit(72));


永远不要让别人来告诉你,你不会做什么,一旦那样,你就失去了自身的意义。你总是要提前准备好别人想不到的事情,一旦机遇来临,你就赢得了先机。
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
 楼主| 发表于 2014-10-31 22:49:53 | 显示全部楼层
回复【4楼】虎头帮大哥:
---------------------------------挺好,,谢谢了!共同学习....
我会好好努力的!
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
 楼主| 发表于 2014-10-31 23:14:37 | 显示全部楼层
回复【5楼】虎头帮大哥:
---------------------------------回复【5楼】虎头帮大哥:
---------------------------------
这个自己测试是没有问题的。初始化时tpad_default_val只有在比较小(正常时为70-80)的时候才会非常灵敏,,所以用下面这条语句判断是否初始化成功if(tpad_default_val>TPAD_ARR_MAX_VAL/20)return 1; 记得是除20不是2,否则不会执行该语句返回值1也就检测不到初始化失败。这里除20的意思是当检测到复位值tpad_default_val〈TPAD_ARR_MAX_VAL/20就认为初始化成功(TPAD_ARR_MAX_VAL/20后的值65536/20=为3276.8,为了更精确可以除个大数,结果大于100就应该没问题的。
我会好好努力的!
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
 楼主| 发表于 2014-10-31 23:15:35 | 显示全部楼层
回复【7楼】IchLiebeDich2014:
---------------------------------
用平板打这么多字真的好费劲啊。
我会好好努力的!
回复 支持 反对

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2014-6-27
在线时间
981 小时
发表于 2016-2-11 11:34:23 | 显示全部楼层
你怎么这么纠结呢,有些设备上电要自己自动校准参考参数,此物件上电不触摸是常识,也算是有个校准过程,应用常理也如此。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 02:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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