触摸屏调试经验谈
//========================================================================
//TITLE:
// 触摸屏调试经验谈
//AUTHOR:
// norains
//DATE:
// Thursday 19-March-2009
//Environment:
// WINDOWS CE 5.0
//========================================================================
1.校准之后依然无法正确使用
这种情况最容易发生驱动和硬件上的错位,很可能是因为驱动对X+,X-(或Y+,Y-)的定义与硬件不一致造成。这种情况是无法通过wince的触摸屏校准程序来转换坐标的。唯一的方法只能在驱动层对坐标进行转换,例如:
#ifdef REVERSE_X
*x = MAX_X - *x + MIN_X;
#endif
#ifdef REVERSE_Y
*y = MAX_Y - *y + MIN_Y;
#endif
2.点击时会无规律飘忽不定
该问题一般因为电压不稳,可以先查一下ADC芯片在工作时,电压是否处于一种稳定的状态。
3.点击时有规律的漂移
这点和第二点不同,该点主要是出在软件方面。最直观的例子是点击explorer的图标,它会呈一定规律的移动。这种情况一般发生于触摸屏大小改变,比如从4.3'变成7'。问题根源是驱动定义的数值和实际的触摸屏采样值不一致造成。比如,之前4.3的MAX_X是4300,可能更换为7'后就变成了4600。
变更触摸屏后的数值,需要实际去测量。最简单的方式,就是通过代码获取数值的范围,然后通过串口打印出来,再在所获得的数据基础上进行微调。
例如:
int getrawdata(int * x, int * y)
{
...
static unsigned int iMaxX = 0,iMinX = MAX_X,iMinY = MAX_X,iMaxY = 0;
...
if(bValidate != FALSE)
{
iMaxX = iMaxX > r_x[ValidNum] ? iMaxX : r_x[ValidNum];
iMaxY = iMaxY > r_y[ValidNum] ? iMaxY : r_y[ValidNum];
iMinX = iMinX < r_x[ValidNum] ? iMinX : r_x[ValidNum];
iMinY = iMinY < r_y[ValidNum] ? iMinY : r_y[ValidNum];
RETAILMSG(TRUE,(TEXT("iMinX:%d,iMaxX:%d,iMinY:%d,iMaxY:%d/r/n"),iMinX,iMaxX,iMinY,iMaxY));
}
...
}