所谓校准,就是将触摸屏的坐标转换成LCD的坐标。
在开发板的LCD表面覆盖了一层触摸屏,点击触摸屏时,我们可以得到触点的坐标,但是显然这个坐标和LCD的坐标不是直接对应的,它们之间应该满足一定的转换公式。
触摸屏和LCD的位置关系如下图所示,下面是LCD(分辨率是480*272),上面覆盖了一层触摸屏。
以LCD的左上方的顶点为原点,横向为X轴,竖向为Y轴建立一个平面直角坐标系。
那么LCD左上方顶点的坐标为(0, 0),右下方顶点的坐标为(479, 271),假设触摸屏的对应点坐标分别为(x1’, y1’),(x2’, y2’)。
问:怎么通过触点坐标(x’,y’)得到LCD对应点坐标(x,y)?
答:我们先单独看x坐标的转换,y坐标同理。
下图是LCD和TS的示意图,假设TS的触点坐标的x轴坐标是x’,对应LCD坐标的x轴坐标是x,TS左右顶点的坐标分别是x1’和x2’,那么有如下等式:(x’ - x1’)/(x2’ - x1’)= (x - 0)/(479 - 0)。
转换一下将x移到左边,其他参数移到右边得:
x = (479 - 0) / (x2’ - x1’) * (x’ - x1’) + 0
一般来说,我们不会选取边界上的点,因为边界上的点不容易点击,容易产生误差。
如下图所示,我们在显示屏上显示两个十字架,点击十字架的中心来选取校准点,x1’和x2’分别是两个校准点的触摸屏坐标,那么公式就变成:(x’ - x1’)/(x2’ - x1’)= (x - x1)/(x2 - x1)。
所以,x轴的转换公式为:
x = (x2 - x1)/ (x2’ - x1’) * (x’ - x1’) + x1
其中(x2 - x1)/ (x2’ - x1’)是长度系数K,x1’和x1分别是触摸屏和LCD校准点的x轴坐标。
同理,我们可以推出y轴的转换式为 y = (y2 - y1)/ (y2’ - y1’) * (y’ - y1’) + y1,其中y1,y2分别是LCD上y轴校准点的y坐标,y1’,y2’分别是触摸屏上y轴校准点的y坐标。
由于触摸屏制作工艺等问题,我们至少需要使用四个校准点,这样才可以保证参数的准确。
实际上,我们在LCD屏幕上显示了五个校准点,也就是五个十字架,分别为A,B,C,D,E五个点。通过A,B,C,D四个点来确定x轴和y轴的长度系数Kx和Ky。
其中,s1’和s1分别是触摸屏和LCD上A到B的距离,s2’和s2分别是触摸屏和LCD上D到C的距离,d1’和d1分别是触摸屏和LCD上A到D的距离,d2’和d2分别是触摸屏和LCD上B到C的距离。
通过这四个点我们就可以得到x轴和y轴的长度系数Kx和Ky:
- Kx = (s1 + s2) / (s1’ + s2’)
- Ky = (d1 + d2) / (d1’ + d2’)
由于LCD上的点坐标是确定的,所以s1 = s2,d1 = d2,那么上面两个式子就变成:
- Kx = 2s / (s1’ + s2’)
- Ky = 2d / (d1’ + d2’)
假设LCD的触摸点坐标为(x, y),那么对应的x轴和y的转换公式就变成了,其中xc,yc为E点的LCD坐标:
- x = (x’ - xc’) * Kx + xc
- y = (y’ - y1’) * Ky + yc