硬汉嵌入式论坛

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

[客户分享] 最新升级STM32-V5开发板光盘资料V6.0的emWin触摸算法bug修正

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2015-6-5 17:18:31 | 显示全部楼层 |阅读模式
最近客户反映V5开发板的电阻触摸屏在emWin例子的使用上存在问题,问题现象:触摸抬起的时候会有一个多余的飞点。
(注意,只有存在这个问题的客户需要注意此问题,不存在这个问题的客户也可以修改为此触摸方法,让触摸更稳定。)
下面运行的是路径:STM32-V5开发板光盘A -> 01.开发板例子 -> 96.emWin触摸校准(仅电阻屏,电容屏无需校准)-> emWin触摸校准例子
1.png

出现这个问题的解决办法如下:
1.  从工程中的bsp_touch.c文件中找到TOUCH_Scan函数:
3.png

2.  替换TOUCH_Scan为如下内容,然后全工程编译即可 。

void TOUCH_Scan(void)
{
    uint16_t usAdcX;
    uint16_t usAdcY;
    static uint16_t s_usXBuf[SAMPLE_COUNT];
    static uint16_t s_usYBuf[SAMPLE_COUNT];
    static uint8_t s_ucPos = 0;
    static uint8_t s_count = 0;
    static uint8_t s_down = 0;
    static uint16_t s_usSaveAdcX, s_usSaveAdcY; /* 用于触笔抬起事件,保存按下和移动的最后采样值 */


    /* 获得原始的ADC值,未滤波 */
    if (g_ChipID == IC_8875)
    {
        /* 如果主程序正在访问RA8875,则丢弃本次触摸采集,避免影响显示 */
        if (RA8875_IsBusy())
        {
            return;
        }
        usAdcX = RA8875_TouchReadX();
        usAdcY = RA8875_TouchReadY();
    }
    else
    {
        if (TSC2046_PenInt())
        {
            /* 如果主程序正在访问其他SPI外设,则丢弃本次触摸采集 */
            if (bsp_SpiBusBusy())
            {
                return;
            }


            usAdcX = TSC2046_ReadAdc(ADC_CH_X);
            usAdcY = TSC2046_ReadAdc(ADC_CH_Y);

        }
        else
        {
            usAdcX = 0;
            usAdcY = 0;
        }
    }


    if (TOUCH_PressValid(usAdcX, usAdcY))
    {
        /* 按压30ms之后才开始采集数据 */
        if (s_count >= 30)
        {
            s_usXBuf[s_ucPos] = usAdcX;
            s_usYBuf[s_ucPos] = usAdcY;


            /* 采集10ms数据进行滤波 */
            if (++s_ucPos >= SAMPLE_COUNT)
            {
                s_ucPos = 0;


                   /* 对ADC采样值进行软件滤波 */
                g_tTP.usAdcNowX = TOUCH_DataFilter(s_usXBuf, SAMPLE_COUNT);
                g_tTP.usAdcNowY = TOUCH_DataFilter(s_usYBuf, SAMPLE_COUNT);

                if (s_down == 0)
                {
                    s_down = 1;

                    /* 触摸按下事件 */
                    State.x = TOUCH_TransX( g_tTP.usAdcNowX, g_tTP.usAdcNowY);
                    State.y = TOUCH_TransY( g_tTP.usAdcNowX, g_tTP.usAdcNowY);
                    State.Pressed = 1;
                    GUI_PID_StoreState(&State);

                    s_usSaveAdcX = g_tTP.usAdcNowX;
                    s_usSaveAdcY = g_tTP.usAdcNowY;

                }
                else
                {


                    if (TOUCH_MoveValid(s_usSaveAdcX, s_usSaveAdcY, g_tTP.usAdcNowX, g_tTP.usAdcNowY))
                    {
                        /* 触摸移动事件 */
                        State.x = TOUCH_TransX( g_tTP.usAdcNowX, g_tTP.usAdcNowY);
                        State.y = TOUCH_TransY( g_tTP.usAdcNowX, g_tTP.usAdcNowY);
                        State.Pressed = 1;
                        GUI_PID_StoreState(&State);


                        s_usSaveAdcX = g_tTP.usAdcNowX;
                        s_usSaveAdcY = g_tTP.usAdcNowY;
                    }
                    else
                    {
                        g_tTP.usAdcNowX = 0; /* for debug stop */
                    }
                }

            }
        }
        else
        {
            s_count++;
        }
    }
    else
    {
        if (s_count > 0)
        {
            if (--s_count == 0)
            {
                /* 触摸释放事件 */
                State.x = -1;
                State.y = -1;
                State.Pressed = 0;
                GUI_PID_StoreState(&State);
                s_count = 0;
                s_down = 0;

                g_tTP.usAdcNowX = 0;
                g_tTP.usAdcNowY = 0;
            }
        }
        s_ucPos = 0;
    }
}
==========================================================
修改后就不存在飞点问题了,现象如下:
2.png
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2015-6-5 22:00:03 | 显示全部楼层
马克
回复

使用道具 举报

0

主题

7

回帖

0

积分

新手上路

积分
0
发表于 2015-6-8 12:15:39 | 显示全部楼层
[s:141]  [s:141]
回复

使用道具 举报

6

主题

390

回帖

408

积分

高级会员

积分
408
发表于 2015-6-9 09:49:05 | 显示全部楼层
[s:142]  [s:142]  [s:142]  [s:142]  [s:142]  [s:142]
回复

使用道具 举报

0

主题

7

回帖

0

积分

新手上路

积分
0
发表于 2015-6-16 12:58:20 | 显示全部楼层
谢谢[s:151] [s:151] [s:151]
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2015-9-23 12:11:25 | 显示全部楼层
我来试试看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 05:51 , Processed in 0.214888 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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