电容触摸传感的理论框架
开发多键表决系统可以帮助解决该问题,以及与小键盘污染关联的其他问题。多键表决系统会选择按下后受影响最大的按键,代价是多次按下动作只能产生单个按键响应。例如,如果触摸会影响两个按键,但手指按下的按键受到的影响最大,该算法将选择受影响最大的按键。
本文引用地址:https://www.eepw.com.cn/article/96947.htm该算法必须获取来自所有可用传感器的数据。举例来说,假定使用了4个传感器。算法还是使用百分比按下检测方法,因为每个传感器的读数可能会稍有不同,采用相对与原始值的偏差可以起到一些帮助。系统必须扫描全部4个传感器,并在扫描之后执行以下步骤:
1. 首先,扫描所有传感器;
2. 在每次扫描期间,记录每个传感器的受影响百分比;
3. 根据受影响程度进行排序;
4. 基于步骤3,对索引进行排序;
5. 位于数组单元0的传感器的受影响程度最高;
6. 确定是否大于最小门限值;
7. 指示按下/未按下。
代码示例1(略)
最后一个复杂解码方案也是百分比方案。百分比计算会占用8位单片机上可用存储器总空间中大量的程序和RAM存储空间,占用。在可能的情况下,最好降低这种存储器消耗。如果使用较大的数值,并可以承受一定的分辨率损失,则可以使用一种较简单的百分比方法。
通过使用更多的移位来代替除法(类似于求均值方案),可以用如下方式确定平均值的百分比门限值:
threshold = average >> 3; // 传感器
// 门限值现在为1/8,即12.5%
if (reading < average – threshold)
{...}
以下列出了一些有用的百分比。
threshold = reading >> 1; // 1/2 = 0.500
threshold = reading >> 2; // 1/4 = 0.250
threshold = reading >> 3; // 1/8 = 0.125
threshold = reading >> 4; // 1/16 = 0.063
threshold = reading >> 5; // 1/32 = 0.031
threshold = reading >> 6; // 1/64 = 0.016
threshold = reading >> 7; // 1/128 = 0.008
对于进行移位的每个位,门限值会损失一定的舍入分辨率。但是,使用较大的16位数值时,对于1/16的百分比(即6.25%),损失4个最低位是可以接受的。现在,对于简单百分比计算,可以省去前面使用的unsigned long percent变量,以及执行除法所需的额外计算量。这是另一种并不仅限用于电容触摸传感的技术,但它对于触摸传感的实现非常有用。
评论