OpenEdv-开源电子网

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

电容触摸的问题

[复制链接]

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-3-30
在线时间
0 小时
发表于 2013-4-12 15:49:39 | 显示全部楼层 |阅读模式
  实验了很多次了,还是有点不明白,但是我终于发现问题在哪了,知其然但是还有点不知其所以然
u8 TPAD_Scan(u8 mode)
{
static u8 keyen=0; //0,可以开始检测;>0,还不能开始检测  
u8 res=0;
u8 sample=3; //默认采样次数为3次  
u16 rval;
if(mode)
{
sample=6; //支持连按的时候,设置采样次数为6次
keyen=0; //支持连按  
}
rval=TPAD_Get_MaxVal(sample); 
if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
{
  rval=TPAD_Get_MaxVal(sample);  
if((keyen==0)&&(rval>(tpad_default_val+TPAD_GATE_VAL)))//大于tpad_default_val+TPAD_GATE_VAL,有效
{
res=1;
}   
// printf("r:%d\r\n",rval);           
keyen=5; //至少要再过5次之后才能按键有效   
}
else if(keyen>2)keyen=2; //如果检测到按键松开,则直接将次数将为2,以提高响应速度
if(keyen)keyen--;               
return res;
}


上面的
程序红色部分就有点不明白
经测试:
1.keyen=5;到keyen=2都一样能够出现相同的现象,改成1就不行了,我个人解是因为keyen--使得keyen=0,之后就有点不解?
2.
 去掉else if(keyen>2)keyen=2; 这样也一样,但是去掉if(keyen)keyen--;就不行了,抓狂?
3.还是请原子哥能够指点一下红色部分,确实犯糊。
 








 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-12 22:00:34 | 显示全部楼层
如果有一次有效触摸,则keyen为5,然后必须触摸无效的时候:else if(keyen>2)keyen=2; ,加速下一次按的响应(如果从5减起,会比较慢)。
而if(keyen)keyen--;是不论是否按下,都会慢慢自减的。

实在不懂,则可以仿真跟踪看一下
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-3-30
在线时间
0 小时
 楼主| 发表于 2013-4-13 22:27:11 | 显示全部楼层
嗯,今天通过jtag仿真,终于弄明白了,其实是存在捕获值小于门槛值得。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 05:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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