硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9620|回复: 14
收起左侧

[emWin] emWin触摸校准问题:如何改成4点校准?

[复制链接]

12

主题

134

回帖

170

积分

初级会员

积分
170
发表于 2014-6-5 10:13:16 | 显示全部楼层 |阅读模式
emwin自带的两点校准程序在实际应用中无法满足要求,想改成更精准的四点或五点校准,
但在emwin中不知道如何修改,求高手指点,谢谢!


void TouchAdjTask(void)
{
    int aPhysX[4], aPhysY[4], aLogX[4], aLogY[4];
    uint8_t i, ucXYChang;
    uint16_t d1,d2,d3,d4,d5,d6;
    float fac1,fac2,fac3;
    uint8_t TP_Adj_Flag = 0xAB;
   
    ucXYChang = 0;
    GUI_Init();
    GUI_SetBkColor(GUI_WHITE);
    GUI_Clear();
    GUI_SetColor(GUI_BLACK);
    GUI_SetFont(&GUI_Font13B_ASCII);
    GUI_Delay(1000);
   
     GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 799, 0,  1023);
     GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 479, 0,  1023);
   
    /* Âß¼-×ø±êò2¾íêÇLCDμÄ×ø±ê */
    aLogX[0] = 15;
    aLogY[0] = 15;
    aLogX[1] = LCD_GetXSize() - 15;
    aLogY[1] = 15;
    aLogX[2] = 15;
    aLogY[2] = LCD_GetYSize() - 15;   
    aLogX[3] = LCD_GetXSize() - 15;
    aLogY[3] = LCD_GetYSize() - 15;

    /* μÃμ½á½¸öλÖÃμÄÎïàí×ø±ê£¬ò2¾íêÇAD×a»»μÃμ½μÄêyÖμ */
    while(1)
    {
        for (i = 0; i < 4; i++)
        {
            _GetPhysValues(aLogX, aLogY, &aPhysX, &aPhysY, _acPos);
        }
        d1 = TOUCH_Abs(aPhysX[0] - aPhysX[1]);//*TOUCH_Abs()
        d2 = TOUCH_Abs(aPhysX[2] - aPhysX[3]);
        d3 = TOUCH_Abs(aPhysY[0] - aPhysY[3]);
        d4 = TOUCH_Abs(aPhysY[1] - aPhysY[2]);
        d5 = sqrt(d1*d1+d3*d3);
        d6 = sqrt(d2*d2+d4*d4);
        fac1 = (float)d1/d2;
        fac2 = (float)d3/d4;
        fac3 = (float)d5/d6;
        if((fac1>0.95&&fac1<1.05)&&(fac2>0.95&&fac2<1.05)&&(fac3>0.95&&fac3<1.05)&&(d1!=0)&&(d2!=0)&&(d3!=0)&&(d4!=0))
        {
            break;
        }
    }
   
    GUI_Clear();  /* μÃμ½D£×¼êyÖμoóÇåÆá */

    GUI_TOUCH_Calibrate(0, aLogX[0], aLogX[3], (aPhysX[0]+aPhysX[2])/2, (aPhysX[1]+aPhysX[3])/2); /* D£×¼XÖá */
    GUI_TOUCH_Calibrate(1, aLogY[0], aLogY[3], (aPhysY[0]+aPhysY[1])/2, (aPhysY[2]+aPhysY[3])/2); /* D£×¼YÖá */

    /*
          ÏÂÃæμÄÅD¶Ïóï¾äÖ÷òaêÇêμÏÖX,Y′¥Ãt·-×aμÄê¶±e£¬èç1ûóD·-×aμÄ»°£¬μ÷óÃemWinμÄ·-×aÖ¸áîÇD»»1yà′¡£
        ÅD¶Ï·-×aμÄ·½·¨êÇ£oÏÔê¾Æá¶Ô½ÇμÄὸöADC×ø±ê£¬XoíYò»¸öêÇADCêyÖμμYÔö£¬ò»¸öêÇêyÖμμY¼õ£¬ÔòX,Y
        ·¢éú·-×aáË£¬èç1û¶¼êÇμYÔö»òÕßμY¼õËμÃ÷ûóD·-×a¡£
          èç1ûXÖáμÄADCêyÖμ»òÕßYÖáμÄADCêyÖμ¾μÏñáË£¨¾μÏñêÇÏà¶ÔóúÂß¼-×ø±ê£¬ò2¾íêÇADC×ø±êà′ËμμÄ£©£¬óÃ
        éÏÃæμÄGUI_TOUCH_Calibrateoˉêy¾íÄü¾àÕy1yà′¡£
    */
    if(((aPhysX[0] > aPhysX[3]) && (aPhysY[0] < aPhysY[3])) || ((aPhysX[0] < aPhysX[3]) && (aPhysY[0] > aPhysY[3])))
    {
        GUI_TOUCH_SetOrientation(GUI_SWAP_XY);
        ucXYChang = 1;
    }

    /* ±£′æ′¥Ãt2Îêyμ½EEPROMàïÃæ */
    g_tTPSL.usAdcX1 = (aPhysX[0]+aPhysX[2])/2;
    g_tTPSL.usAdcX2 = (aPhysX[1]+aPhysX[3])/2;
    g_tTPSL.usAdcY1 = (aPhysY[0]+aPhysY[1])/2;
    g_tTPSL.usAdcY2 = (aPhysY[2]+aPhysY[3])/2;
   
    g_tTPSL.XYChange = ucXYChang;
   
    ee_WriteBytes((uint8_t *)&g_tTPSL, 32758, sizeof(g_tTPSL));
   
    /* ¶áè¡EEPROMÖDμÄ2Îêy */   
    ee_ReadBytes((uint8_t *)&g_tTPSL, 32758, sizeof(g_tTPSL));
   
   
    if((g_tTPSL.usAdcX1 == ((aPhysX[0]+aPhysX[2])/2))&&
        (g_tTPSL.usAdcX2 == ((aPhysX[1]+aPhysX[3])/2))&&
        (g_tTPSL.usAdcY1 == ((aPhysY[0]+aPhysY[1])/2))&&
        (g_tTPSL.usAdcY2 == ((aPhysY[2]+aPhysY[3])/2))&&
        (g_tTPSL.XYChange == ucXYChang))
    {
        _DispStringCentered("Calibration Success\n");
        ee_WriteBytes((uint8_t *)&TP_Adj_Flag, 3, 1);
    }
    else
    {
        _DispStringCentered("Calibration fail\n");
    }

    /* ÏÔê¾êó±ê */
    GUI_CURSOR_Show();

    while(1)
    {
        GUI_PID_STATE State;
        
        GUI_TOUCH_GetState(&State);
        if (State.Pressed == 1)
        {
          //GUI_FillCircle(State.x, State.y, 5);
            GUI_SetPenSize(5);
            GUI_DrawPoint(State.x, State.y);
        }
        GUI_Delay(1);
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115723
QQ
发表于 2014-6-5 10:22:35 | 显示全部楼层
amobbs上面有一些网友使用tslib做的5点校准,你可以看看:
http://www.amobbs.com/search.php ... es&kw=tslib
回复

使用道具 举报

13

主题

87

回帖

126

积分

初级会员

积分
126
发表于 2014-9-12 16:56:03 | 显示全部楼层
楼主5点校准弄好了?
回复

使用道具 举报

38

主题

136

回帖

40

积分

初级会员

积分
40
发表于 2014-9-12 21:47:54 | 显示全部楼层

回 abcdotaabc 的帖子

abcdotaabc:楼主5点校准弄好了? (2014-09-12 16:56) 
我们只有4点的。
回复

使用道具 举报

13

主题

87

回帖

126

积分

初级会员

积分
126
发表于 2014-9-13 16:01:40 | 显示全部楼层
tslib不是5点校准?
回复

使用道具 举报

38

主题

136

回帖

40

积分

初级会员

积分
40
发表于 2014-9-13 18:13:53 | 显示全部楼层

回 abcdotaabc 的帖子

abcdotaabc:tslib不是5点校准? (2014-09-13 16:01) 
我们的校准代码是我们原创的,只有2点和4点
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2014-9-28 14:06:09 | 显示全部楼层
amo网站上,小农的lpc1788正确移植了5点触摸校准

其实你也可以自己做,显式调用GUI_TOUCH_StoreState而不是GUI_TOUCH_Exec,这样就不会使用内置的触摸校准函数
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2014-9-28 14:07:17 | 显示全部楼层
mdk有自定义的触摸校准模板GUI_X_Touch_StoreState.c,在Keil\\ARM\\Segger\\emWin\\Sample\\GUI_X这个目录里
回复

使用道具 举报

10

主题

12

回帖

42

积分

新手上路

积分
42
发表于 2014-10-23 16:05:06 | 显示全部楼层

回 szu_lsh 的帖子

szu_lsh:我们只有4点的。 (2014-09-12 21:47) 
问一下四点校准在那个例程里
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115723
QQ
发表于 2014-10-23 21:51:38 | 显示全部楼层

回 ljc710871968 的帖子

ljc710871968:问一下四点校准在那个例程里 (2014-10-23 16:05) 
这个里面就有:http://www.armbbs.cn/forum.php?mod=viewthread&tid=345
回复

使用道具 举报

12

主题

134

回帖

170

积分

初级会员

积分
170
 楼主| 发表于 2015-1-23 16:42:38 | 显示全部楼层

回 abcdotaabc 的帖子

abcdotaabc:楼主5点校准弄好了? (2014-09-12 16:56) 
我在emwin官方两点校准的基础上加了些语句,变成了4点校准,计算各点的距离,然后判断值是否保存,保存是值是平均值,。暂时先这样了
回复

使用道具 举报

12

主题

134

回帖

170

积分

初级会员

积分
170
 楼主| 发表于 2015-1-23 16:46:15 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:amo网站上,小农的lpc1788正确移植了5点触摸校准

其实你也可以自己做,显式调用GUI_TOUCH_StoreState而不是GUI_TOUCH_Exec,这样就不会使用内置的触摸校准函数 (2014-09-28 14:06) 
谢谢指导...我现在在是在官上两点校准的基础了加了些代码弄成了个将就用的四点校准,。先将就用了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115723
QQ
发表于 2015-1-25 14:59:49 | 显示全部楼层

回 xiaosir 的帖子

xiaosir:谢谢指导...我现在在是在官上两点校准的基础了加了些代码弄成了个将就用的四点校准,。先将就用了 (2015-01-23 16:46) 
用我在最近发布的示波器代码中使用的4点触摸校准就可以了。 这个是我们自己做的。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2017-1-3 14:31:29 | 显示全部楼层
效准保存的触屏数据是乱的是怎么回事,也就是校准时是准确的,再不效准,跳过十秒效准步骤,直接进入画图界面是乱的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115723
QQ
发表于 2017-1-4 09:29:37 | 显示全部楼层

回 guoxiang2017 的帖子

guoxiang2017:效准保存的触屏数据是乱的是怎么回事,也就是校准时是准确的,再不效准,跳过十秒效准步骤,直接进入画图界面是乱的 (2017-01-03 14:31) 
你的意思是不是指的保存进去的和读出的不一样。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 15:06 , Processed in 0.274831 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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