应用场景
发现以前写的有点模糊不清,先来普及一下应用场景吧,这篇博文是针对电阻屏的第一次校准而写的,应用场景图示:
##第一步,得到屏幕上 4 个点位置如下图
变量解释:
pos_temp[0-3][2]:
[0-3] 依次 (x1,y1, - x4,y4,)
[2] = 0, x
1, y
首先读取这四个点的AD转换值,然后由两点间的距离公式
D=Sqrt[(x1-x2)^2+(y1-y2)^2]
依次求出 d1,d2,d3,d4,以及相应的对角线距离,判断是否 d1==d2 ,d3==d4,以及对角线相等,
如果相等则进行下一步,不相等则重新取值。
##第二步,利用如下程序计算校准参数
// (液晶理论宽度-40)/(x2-x1) 即 液晶理论宽度点阵值/AD测量值 = 每AD值对应多少点阵
xfac = (float) (lcddev.width-40) / (pos_temp[1][0]-pos_temp[0][0]); // 得到 xfac
// 液晶理论宽度点阵值 - 每 AD 值对应多少点阵 * (x1+x2) = 左边 20 点阵的测试误差
// 再除 2 是因为 x1+x2 将左边 20 点阵加了两次,误差也 double 了
xoff = (lcddev.width-tp_dev.xfac*(pos_temp[1][0]+pos_temp[0][0]))/2; // 得到 xoff
// (液晶理论高度-40)/(y2-y1) 即 液晶理论高度点阵值/AD测量值 =每AD值对应多少点阵
yfac = (float)(lcddev.height-40)/(pos_temp[2][1]-pos_temp[0][1]); // 得到 yfac
// 液晶理论宽度点阵值 - 每 AD 值对应多少点阵 * (y3+y1) = 左边 20 点阵的测试误差
// 再除 2 是因为 x1+x2 将左边 20 点阵加了两次,误差也 double 了
yoff = (lcddev.height-tp_dev.yfac*(pos_temp[2][1]+pos_temp[0][1]))/2; // 得到yoff
##第三步,应用校准参数
每次读到相应的AD值时,转换为相应的触摸点阵位置
屏幕坐标点 = 测量AD值 * 每AD对应点阵数 + 误差
x = xfac * x的AD值 + xoff; //将结果转换为屏幕坐标
y = yfac * y的AD值 + yoff;