初级会员

- 积分
- 192
- 金钱
- 192
- 注册时间
- 2015-7-22
- 在线时间
- 126 小时
|
我想把UCGUI的两点校准改成四点校准,但是遇到问题,请大家支支招。谢谢。
static void TouchTask(void *p_arg)
{
int x,y;
(void)p_arg;
while(1)
{
/* 延时10ms会读取一次触摸坐标 */
// OSTimeDlyHMSM(0,0,0,20);
OSTimeDly (20);
GUI_TOUCH_Exec();//这个函数我想自己写一个触摸轴(x,y)获取函数,替代他。但是没有成功。请教大家有没有做过同样的尝试?给小弟支支招。谢谢。
GUI_TOUCH_GetUnstable(&x,&y);
USART_OUT(USART1,"\r\nx=%d y=%d\r\n",x,y);
USART_SEND(USART1,"+++++++++++++++++");
}
}
//自写函数,因为没有通过,所一照搬源码,删减,代码,还是不行,百思不得其解啊!
void MyGUI_TOUCH_Exec(void)
{
#ifndef WIN32
static U8 ReadState;
int x,y;
/* calculate Min / Max values */
/* Execute the state machine which reads the touch */
switch (ReadState)
{
case 0:
y = TOUCH_X_MeasureY();
TOUCH_X_ActivateY(); /* Prepare X- measurement */
ReadState++;
break;
default:
x = TOUCH_X_MeasureX();
TOUCH_X_ActivateX(); /* Prepare Y- measurement */
/* Convert values into logical values */
// if ((x < xMin) || (x > xMax) || (y < yMin) || (y > yMax))
//{
// _StoreUnstable(-1, -1);
//}
// else
{
//x = _AD2X(x);
// y = _AD2Y(y);
//My_StoreUnstable(x, y);
GUI_TOUCH_StoreState(x,y);//这里我换成了直接存储代码,把x,y的坐标保存起来,但是也不行。貌似UCGUI源码中还设计其他变量。
}
/* Reset state machine */
ReadState = 0;
break;
}
#endif /* WIN32 */
}
根据对源码的追踪,发现[size=18.018px] GUI_TOUCH_StoreState(x,y);这个函数是保存x,y坐标内容的有效函数。但是另一个函数引起了我的注意。
[size=18.018px]UCGUI源码:
void GUI_TOUCH_StoreUnstable(int x, int y) {
int xDiff, yDiff;
xDiff = abs (x - _x);//这里的_x,_y变量貌似纯在问题。我在自己写的函数里也想给他们赋值什么的,奈何他们是static
yDiff = abs (y - _y);
if (xDiff + yDiff > 2) {
_x = x;
_y = y;
GUI_TOUCH_StoreState(x, y);
}
}
问题应该就在[size=18.018px]_x,_y这两个变量里面,希望大家支支招。谢谢!
|
|