OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3579|回复: 3

UCGUI3.98触摸校准改4点校准问题

[复制链接]

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2015-7-22
在线时间
126 小时
发表于 2016-3-18 21:35:06 | 显示全部楼层 |阅读模式
        我想把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这两个变量里面,希望大家支支招。谢谢!

work is work!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-5-11
在线时间
2 小时
发表于 2016-5-12 20:00:07 | 显示全部楼层
楼主解决的吗?我也想弄四点校正,还没弄好
回复 支持 反对

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2015-7-22
在线时间
126 小时
 楼主| 发表于 2016-5-12 20:48:26 | 显示全部楼层
下雨了34 发表于 2016-5-12 20:00
楼主解决的吗?我也想弄四点校正,还没弄好

弄了好久,也有些收获。但是还是决定放弃。实验的最终结果是,改成四点校正,可以实现触摸,但是不知道UCGUI怎么回事,自己写的GUI_TOUCH_Exec函数,刷屏会出现未知问题,可能是ucgui调用了本身GUI_TOUCH_Exec函数中的一些变量值(但是追进代码也没什么发现)。还有可能是我硬件问题吧。总之折腾很久之后还是放弃了。毕竟修改UCGUI的源码不是什么正确的事情,至少对于我们初学者来说。
work is work!!!
回复 支持 反对

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2015-7-22
在线时间
126 小时
 楼主| 发表于 2016-5-12 20:53:42 | 显示全部楼层
下雨了34 发表于 2016-5-12 20:00
楼主解决的吗?我也想弄四点校正,还没弄好

回头我再抽空试试
work is work!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 12:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表