OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 9406|回复: 22

请教下触摸屏校准的问题

[复制链接]

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2011-3-10
在线时间
0 小时
发表于 2011-4-25 13:53:47 | 显示全部楼层 |阅读模式
想请教下老大,那个比例因子和偏移值是怎么算的呢?
Pen_Point.xfac=(float)200/(pos_temp[1][0]-pos_temp[0][0]);//得到xfac
Pen_Point.xoff=(240-Pen_Point.xfac*(pos_temp[1][0]+pos_temp[0][0]))/2;//得到xoff
按提供的公式LCDx=xfac*Px+xoff;得到的是xfac=(LCDx-xoff)/Px      在算xfac时,那个xoff可以丢了么?那个200是两个横坐标的距离吧??

而在算偏移值中这里横坐标相加(pos_temp[1][0]+pos_temp[0][0])是怎么回事呢?
那在算xfac和xoff两个中的Px怎么就不同了呢,
小弟不解,求高手说下了,,
先谢了,,

回复

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2011-4-25 15:04:48 | 显示全部楼层
回复【楼主位】心首尚路:
-------------------------------
公式如下:
LCDx=xfac*Px+xoff;
LCDy=yfac*Py+yoff;
这里面,我们要求的有4个未知数,xfac,yfac,xoff,yoff.
我们可以知道的是LCDx,LCDy,Px,Py.所以,我们要求4组LCDx,LCDy,Px,Py,才能求解上面的方程.
xoff,yoff为什么丢了?我想你应该明白了,四元一次方程,你说上面如何解?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2011-3-10
在线时间
0 小时
 楼主| 发表于 2011-4-25 16:07:10 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
多谢了啊---原子。。
我用笔在本子写上去就搞懂了,还是我们太懒了唉,见谅了,呵呵,,那个xoff是抵消了。
回复 支持 反对

使用道具 举报

  离线 

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2010-12-21
在线时间
0 小时
发表于 2011-5-3 16:19:11 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
请教原子大哥,校准程序的执行是先画一个点,然后触摸一次,产生中断,在这一个中断中,画出第2个点,这样触摸三次就完成了校准,得出四个参数,是这样吗 ?

我的疑问是: 校准程序内怎么是while循环呢,这样不是一直不能退出吗?  我测试的就是一直在while里面循环,而且查看得到的 物理坐标随触点的位置不同而变化,而四个参数一直为0,       困惑~
                 
          
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2011-5-3 18:09:04 | 显示全部楼层
是的.
你把显示也做到while里面,就可以了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2010-12-21
在线时间
0 小时
发表于 2011-5-3 18:22:27 | 显示全部楼层
回复【5楼】正点原子:
-------------------------------
这样可以吗?  我看例程里面直接就是 Touch_Adjust 函数呀(KEY0按下)?  这样不是一直执行这个while吗
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2011-5-3 19:00:18 | 显示全部楼层
是啊,在校准完成之后,就会break的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2010-12-21
在线时间
0 小时
发表于 2011-5-3 22:05:06 | 显示全部楼层
回复【7楼】正点原子:
-------------------------------
  我的主程序就是
.........  

   Touch_Adjust(); //校准
    
    while(1)
    {
          ......
    }

......

中断就是俺您写的那样,但是就是一直处于校准状态,一直触屏的话,那四个校准点一直循环出现 ,怎么回事呢
中断就是
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2011-5-4 08:34:17 | 显示全部楼层
你直接用我的触摸校准,可以么?

有可能你触摸的时候,没触摸准.也有可能触屏有问题了.你先试试例程的校准,看看可以不.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2010-12-21
在线时间
0 小时
发表于 2011-5-4 16:13:49 | 显示全部楼层
回复【9楼】正点原子:
-------------------------------
终于校准测试通过了,我把那个校准初始点改为(20,20)改为(40,40)了,后面都对应改了,能校准了,不过得多试几次,第一次触摸时,反应特别灵敏,稍微一接触就直接画出第三个校准点了,不知道怎么回事?    还有就是在液晶的四周边缘大概10个像素点左右范围内,为什么画不出显示颜色呀?
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2011-5-4 16:17:25 | 显示全部楼层
回复【10楼】cybrian:
-------------------------------
应该就是你改为40,40的结果.校准程序是按20,20来设计的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2010-12-21
在线时间
0 小时
发表于 2011-5-4 21:14:32 | 显示全部楼层
回复【11楼】正点原子:
-------------------------------
这个点对校准参数的或许应该没有很大的影响吧,我把后面三个点都对应调整了的。 
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2011-5-5 00:07:38 | 显示全部楼层
回复【12楼】cybrian:
-------------------------------
在计算公式里面要进行修改.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2012-11-7
在线时间
0 小时
发表于 2012-11-13 21:58:33 | 显示全部楼层
回复【4楼】cybrian:
---------------------------------
你好,我也是和你一样的问题,但是我的改了还是会一直校准循环
回复 支持 反对

使用道具 举报

  离线 

62

主题

300

帖子

1

精华

高级会员

Rank: 4

积分
819
金钱
819
注册时间
2012-8-3
在线时间
72 小时
发表于 2013-5-20 02:04:29 | 显示全部楼层
回复【楼主位】心首尚路:
---------------------------------
200 = 220 - 20,其实算xfac和xoff只需要两个点:点1和点2。点1(20,20)和点2(220,20),y轴坐标一样,直接忽略,只看x坐标,x1=20,x2=220。在X坐标- ad值曲线中,去两个点,斜率是对边比邻边,xfac = (x2-x1)/(ad2-ad1)
=(220-20)/(ad2-ad1)。令我不解的是,算出xfac后,xoff不是直接代入其中一个点就可以算出来了吗,为什么要是[240-xfac*(ad1+ad2)]/2??除以2是怎么回事??直接用xoff = x1- xfac*ad1; 
但是,当我打完这段话的时候,我突然想到了,军哥是用取平均值的方法减小误差,xoff1 = ad1 - xfac*x1 ,xoff2 = ad2 - xfac*x2,
最终,xoff = (xoff1 + xoff2)/2,所以xoff =[x1+x2-xfac*(ad1+ad2)]/2 = [240-xfac*(ad1+ad2)]/2!!!!!!!!!!!!!!!!!!!!!!!!!程序员,不容易啊。
回复 支持 反对

使用道具 举报

  离线 

1

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-3-26
在线时间
0 小时
发表于 2013-12-15 21:32:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
mian()
{
.....
while(1)
{
  key=KEY_Scan();
printf("sds3=%x\n",Pen_Point.Key_Sta);
if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下  01
{ printf("sds3=%x\n",Pen_Point.Key_Sta);
Pen_Int_Set(0);//关闭中断
   printf("EN=%d\n",PEN);
do
{
Convert_Pos();
Pen_Point.Key_Sta=Key_Up;    ///00
printf("%x",Pen_Point.Key_Sta);
if(Pen_Point.X0>216&&Pen_Point.Y0<16)
Load_Drow_Dialog();//清除
else 
{
Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);//画图     
GPIOC->ODR|=1<<1;    //PC1 上拉    
}
printf("\nsdddfd=%d\n",sdddfd);
}while(PEN==0);//如果PEN一直有效,则一直执行
         我的疑问是PEN为检测屏幕是否一直在按下,如按下,则一直陷入这个循环中,但我没发现但松手时pen的值为1啊,是在中断中吗?可是没看到啊,求解?

}
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2013-12-15 23:26:08 | 显示全部楼层
回复【16楼】电光火石:
---------------------------------
这里有点小问题,我也解释不了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

1

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-3-26
在线时间
0 小时
发表于 2013-12-16 08:55:12 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
mian() 

..... 
while(1) 

  key=KEY_Scan(); 
printf("sds3=%x\n",Pen_Point.Key_Sta); 
if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下  01 
{ printf("sds3=%x\n",Pen_Point.Key_Sta); 
Pen_Int_Set(0);//关闭中断 
   printf("EN=%d\n",PEN); 
do 

Convert_Pos(); 
Pen_Point.Key_Sta=Key_Up;    ///00 
printf("%x",Pen_Point.Key_Sta); 
if(Pen_Point.X0>216&&Pen_Point.Y0<16) 
Load_Drow_Dialog();//清除 
else  

Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);//画图      
GPIOC->ODR|=1<<1;    //PC1 上拉    /****************//////////// 

printf("\nsdddfd=%d\n",sdddfd); 
}while(PEN==0);
上面程序中的GPIOC->ODR|=1<<1;又是什么意思了,这句又有什么作用,
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2013-12-16 23:01:53 | 显示全部楼层
回复【18楼】电光火石:
---------------------------------
是我发现这个问题后做的一个补救措施
不过实际发现有些可以,有些还是退出不了.
你可以去掉这句.但是加上delay_us,貌似效果很好,你可以测试下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

1

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-3-26
在线时间
0 小时
发表于 2013-12-17 14:08:14 | 显示全部楼层
回复【19楼】正点原子:
---------------------------------
是因为pen的电平无法确定吗?
回复 支持 反对

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2013-12-17 19:31:57 | 显示全部楼层
回复【20楼】电光火石:
---------------------------------
是不听使唤。
本来松开了PEN应该为0,事实上,你松开,还是检测到1,比较奇怪。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2017-8-7
在线时间
22 小时
发表于 2018-1-13 15:59:14 | 显示全部楼层
正点原子 发表于 2011-4-25 15:04
回复【楼主位】心首尚路:
-------------------------------
公式如下:
LCDx=xfac*Px+xoff;
LCDy=yfac*Py+y ...

校准参数得到的全是4095,是什么原因????
回复 支持 反对

使用道具 举报

  离线 

2

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
470
金钱
470
注册时间
2016-11-16
在线时间
99 小时
发表于 2018-1-13 16:21:38 | 显示全部楼层
校准的时候  按住一个点 稍微久一点。。PEN检测就正常了
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-22 22:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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