|
2点触摸校准:
由于不同电阻触摸板的线性度参差不齐,不能直接采用比例关系将电阻触摸芯片STMPE811的返回
值转换成实际的坐标。比如我们操作的显示屏分辨率是800*480,电阻触摸芯片采用STMPE811(12位ADC,触摸值范围0-4095),获得当前的触摸值是(1024, 2048),按照比例关系转换成坐标值就是(1024*800/4096,2048*800/4096),即(200,400)。采用这种方法效果不好,容易出现点击不准确的问题。
鉴于此原因,需要通过触摸校准在ADC数值和显示屏分辨率之间建立一个新的线性关系,简单的说就是由比例关系y = ax升级为y = ax + b。如果有了新的触摸ADC数值,代入这个线性关系里面就可以得到当前实际的坐标值,触摸校准的作用就在这里了。
具体实现原理图如下:
在左上角和右下角分别设置两个坐标点(LcdX0, LcdY0)和(LcdX1, LcdY1),然后让用户去点击,会得到两组ADC数值(AdcX0,AdcY0)和(AdcX1, AdcY1)。
根据这四个坐标点,可以建立两组方程,一个X轴的,一个Y轴。
将数值(AdcX0, LcdX0)和(AdcX1, LcdX1)代入方程y = ax + b得到X轴方程 :
y = (x - AdcX0)*(LcdX1 - LcdX0)/(AdcX1 - AdcX0) + LcdX0。
将数值(AdcY0, LcdY0)和(AdcY1, LcdY1)代入方程y = ax + b得到Y轴方程
y = (x - AdcY0)*(LcdY1 - LcdY0)/(AdcY1 - AdcX0) + LcdY0。
后面采集到的ADC数值直接代入上面公式就可以得到校准后的物理坐标值(实际的分辨率坐标)。
4点触摸校准
4点触摸校准实现,略复杂,实现原理如下(如果理解起来麻烦的话,会用就行,一般情况下2点校准就行):
在LCD的左上角,右上角,左下角和右下角分别标坐标点(LcdX1, LcdY1),(LcdX4, LcdY4),(LcdX3, LcdY3)和(LcdX2, LcdY2)。然后让用户去点击,会得到四组ADC数值(AdcX1, AdcY1),(AdcX4, AdcY4),(AdcX3, AdcY3)和(AdcX2, AdcY2)。
计算X轴:
1. 将数值(AdcX1,AdcY1)和(AdcX2, AdcY2)代入方程y = ax + b得到一组方程
y = (x - AdcX1)*(AdcY2- AdcY1)/(AdcX2- AdcX1) + AdcY1
2. 这里将AdcX2用AdcX3替换,那么坐标方程就变为
y = (x - AdcX1)*(AdcY2- AdcY1)/(AdcX3- AdcX1) + AdcY1。
3. 同理,将AdcX1用AdcX4替换,那么坐标方程就变为
y = (x - AdcX4)*(AdcY2- AdcY1)/(AdcX3- AdcX4) + AdcY1。
那么将采集的X值代入上面两个方程会得到两个数值,假设数值是x1和x2。
4. 再将(x1, LcdX1))和(x2, LcdX2)代入方程y = ax + b得到一组方程
y = (x - x1)*(LcdX2- LcdX1)/(x2- x1) + LcdX1。
将采集的X轴ADC数值再次代入这个方程就得到了最终的物理坐标(实际的分辨率坐标)。
计算Y轴:
1. 将数值(AdcX1, AdcY1)和(AdcX2, AdcY2)代入方程y = ax + b得到一组方程
y = (x - AdcX1)*(AdcY2- AdcY1)/(AdcX2- AdcX1) + AdcY1
2. 这里将AdcY2用AdcY4替换,那么坐标方程就变为
y = (x - AdcX1)*(AdcY4- AdcY1)/(AdcX2- AdcX1) + AdcY1
3. 同理,将AdcX1用AdcX3替换,那么坐标方程就变为
y = (x - AdcX3)*(AdcY2- AdcY1)/(AdcX2- AdcX3) + AdcY1
那么将采集的X值代入上面两个方程会得到两个数值,假设数值是x1和x2。
4. 再将(x1, LcdY1))和(x2, LcdY2)代入方程y = ax + b得到一组方程
y = (x - x1)*(LcdY2- LcdY1)/(x2- x1) + LcdY1。
将采集的Y轴ADC数值再次代入这个方程就得到了最终的物理坐标(实际的分辨率坐标)。
|
|