電阻式觸摸屏校準(zhǔn)算法分析_第1頁(yè)
電阻式觸摸屏校準(zhǔn)算法分析_第2頁(yè)
電阻式觸摸屏校準(zhǔn)算法分析_第3頁(yè)
電阻式觸摸屏校準(zhǔn)算法分析_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、電阻式觸摸屏校準(zhǔn)算法分析<一>算法分析電阻式觸摸屏在X,Y坐標(biāo)方向上是線性的,比如S32采用的觸摸屏,理論上Xmin=0,Xmax=1023,Ymin=0,Ymax=1023。但是實(shí)際的觸摸屏,往往是xmin>0,xmax<1023,ymin>0,ymax<1023。所以就需要校準(zhǔn)。此文討論的校準(zhǔn)算法,其原理就是利用觸摸屏的線性特性,針對(duì)被校準(zhǔn)的觸摸屏,獲取其真正的x,y的范圍,即xmin,ymin,xmax,ymax將其記錄下來(lái)。以后當(dāng)觸摸事件發(fā)生,將觸摸屏報(bào)告的原始坐標(biāo)(x,y)按比例投射到01023的坐標(biāo)上即可。注意,TP與LCD在相同的坐標(biāo)方向上,具

2、有相似性,即比例一致性。看看對(duì)原始坐標(biāo)的處理:If(x<xmin)x=0;Elseif(x>xmax)x=xmax-xmin;Elsex=1023*(x-xmin)/(xmax-xmin);If(y<ymin)y=0;Elseif(y>ymax)y=ymax-ymin;Elsey=1023*(y-ymin)/(ymax-ymin);可見(jiàn),對(duì)原始坐標(biāo),先減去一個(gè)0位置的偏移量(x-xmin),然后求得它X范圍上的比率(x-xmin)/(xmax-xmin),再乘以1023,就得到了投射到(01023)上的坐標(biāo)。再看看校準(zhǔn)算法。在以下的討論中,所謂物理坐標(biāo),指觸摸屏上的坐標(biāo)

3、PT;所謂邏輯坐標(biāo),指LCD上的坐標(biāo)PL。LCD的寬度(W)對(duì)應(yīng)TP的X方向,LCD的高度(H)對(duì)應(yīng)TP的Y方向。通過(guò)點(diǎn)擊三個(gè)校準(zhǔn)點(diǎn)Po(x,y),Px(x,y),Py(x,y),我們能得到圖中內(nèi)層方框的X,Y的物理坐標(biāo)范圍,即Xm=Px.x-Po.xYm=Py.y-Po.y將此圖投射到LCD上,有如下(物理值->邏輯值)的對(duì)應(yīng)關(guān)系:Xl->Lwl,Xm->Lwm,Xr->Lwr,Yb->Lhb,Ym->Lhm,Yt->Lht。根據(jù)TP與LCD的比例一致性,可以這樣計(jì)算得到Xl,Xr,Yb,Yt:Xr=(Xm/Lwm)*LwrYt=(Ym/Lhm)*L

4、htxmax=Px.x+Xrymax=Py.y+YtXl=(Xm/Lwm)*LwlYb=(Ym/Lhm)*Lhb于是我們的目的達(dá)到了:x范圍:xmin=Po.x-Xly范圍:ymin=Po.yYbY<二>代碼實(shí)現(xiàn)1、對(duì)觸屏上報(bào)的物理坐標(biāo)值PT的處理。PTx=(x>input_dev->absmaxABS_X)?(input_dev->absmaxABS_X-input_dev->absminABS_X)(x<=input_dev->absminABS_X)?0:(x-input_dev->absminABS_X)*1023)/(input_

5、dev->absmaxABS_X-input_dev->absminABS_X);PTy=(y>input_dev->absmaxABS_Y)?(input_dev->absmaxABS_Y-input_dev->absminABS_Y):(y<=input_dev->absminABS_Y)?0:(y-input_dev->absminABS_Y)*1023)/(input_dev->absmaxABS_Y-input_dev->absminABS_Y);2、應(yīng)用層根據(jù)上報(bào)的物理坐標(biāo),換算得到對(duì)應(yīng)LCD寬高的邏輯坐標(biāo)值PL。P

6、Lx=(PTx/1023)*240Ply=(Pty/1023)*4003、校準(zhǔn)數(shù)據(jù)的計(jì)算過(guò)程。factorx=(tscalcmd.curtsmaxx-tscalcmd.curtsminx)/tscalcmd.guiw;factory=(tscalcmd.curtsmaxy-tscalcmd.curtsminy)/tscalcmd.guih;/*calculatetherealboundaryfromthedatacollectedbyAndroidcalibrationapplication*/*+*/high_adc_x=(ts_cal_cmd.p_ts.px.x*factor_x);low

7、_adc_x=(ts_cal_cmd.p_ts.po.x*factor_x);high_adc_y=(ts_cal_cmd.p_ts.py.y*factor_y);low_adc_y=(ts_cal_cmd.p_ts.po.y*factor_y);unit_adc_x=(high_adc_x-low_adc_x)/(ts_cal_cmd.p_gui.px.x-ts_cal_cmd.p_gui.po.x)/ts_cal_cmd.grid_x_size);unit_adc_y=(high_adc_y-low_adc_y)/(ts_cal_cmd.p_gui.py.y-ts_cal_cmd.p_gu

8、i.po.y)/ts_cal_cmd.grid_y_size);g_ts_range.max_x=high_adc_x+(ts_cal_cmd.gui_w-ts_cal_cmd.p_gui.px.x)/ts_cal_cmd.grid_x_size)*unit_adc_x;g_ts_range.min_x=low_adc_x-(ts_cal_cmd.p_gui.po.x)/ts_cal_cmd.grid_x_size*unit_adc_x;g_ts_range.max_y=high_adc_y+(ts_cal_cmd.gui_h-ts_cal_cmd.p_gui.py.y)/ts_cal_cmd

9、.grid_y_size*unit_adc_y;g_ts_range.min_y=low_adc_y-(ts_cal_cmd.p_gui.po.y)/ts_cal_cmd.grid_y_size*unit_adc_y;g_ts_range.y_th=unit_adc_y;/*/*reportthecalibratedboundarydata*/*+*/g_ts_range.min_x+=ts_cal_cmd.cur_ts_minx;g_ts_range.max_x+=ts_cal_cmd.cur_ts_minx;g_ts_range.min_y+=ts_cal_cmd.cur_ts_miny;

10、g_ts_range.max_y+=ts_cal_cmd.cur_ts_miny;tscalcmd.curtscalminx=gtsrange.minx;tscalcmd.curtscalmaxx=gtsrange.maxx;ts_cal_cmd.cur_ts_cal_miny=g_ts_range.min_y;ts_cal_cmd.cur_ts_cal_maxy=g_ts_range.max_y;4、填入代碼中的默認(rèn)校準(zhǔn)數(shù)據(jù)T_ts_calibrate_gui_cmdg_default_cal_data=1,0,1023,0,1023,240,400,(/cur_ts_minx,maxx,m

11、iny,maxy/LCM:width/heightdefinedinim9815_lcm.h),(20,20),(220,20),(20,380)/Touchpoints:po,px,py(20,20),(220,20),(20,380)/Calibrationpoints:po,px,py),20,20,0,1023,0,1023,/x,ygridsize/cur_ts_cal_minx,maxx,miny,maxy);三實(shí)例分析1、第1次使用觸屏,進(jìn)入圖形校準(zhǔn)界面。2、載入默認(rèn)校準(zhǔn)數(shù)據(jù)g_default_cal_data,3、得到3個(gè)校準(zhǔn)點(diǎn)的物理坐標(biāo),用默認(rèn)校準(zhǔn)數(shù)據(jù)參與處理,上報(bào),最后轉(zhuǎn)換

12、為邏輯坐標(biāo)。點(diǎn)(20,20):觸屏得到的坐標(biāo)Po(260,210)-上報(bào)坐標(biāo)(260,210)-邏輯坐標(biāo)(61,82)點(diǎn)(220,20)觸屏得到的坐標(biāo)Px(865,200)-上報(bào)坐標(biāo)(865,200)-邏輯坐標(biāo)(203,78)點(diǎn)(20,380)觸屏得到的坐標(biāo)Py(250,950)-上報(bào)坐標(biāo)(250,950)-邏輯坐標(biāo)(59,371)4、將得到的3個(gè)校準(zhǔn)點(diǎn)的邏輯坐標(biāo),代入新校準(zhǔn)數(shù)據(jù)的計(jì)算過(guò)程。 Firststep:物理坐標(biāo)/邏輯坐標(biāo)的比值factor_x=(1023-0)/240=4.2625factor_y=(1023-0)/400=2.5575X范圍,Y范圍。©secondstep

13、:將測(cè)到的校準(zhǔn)點(diǎn)之邏輯坐標(biāo)轉(zhuǎn)化為物理坐標(biāo)。得到以校準(zhǔn)點(diǎn)為限的high_adc_x=(203*4.2625)=865.3low_adc_x=(61*4.2625)=260high_adc_y=(371*2.5575)=948.8low_adc_y=(82*2.5575)=209.7 thirdstep:得到每個(gè)邏輯格子對(duì)應(yīng)的X、丫的物理寬度。unit_adc_x=(865.3-260)/(220-20)/20)=60.53unit_adc_y=(948.8-209.7)/(380-20)/20)=41.06 forthstep:以校準(zhǔn)點(diǎn)為限的X范圍,Y范圍,加上校準(zhǔn)點(diǎn)到屏邊緣的距離所對(duì)應(yīng)的物理寬

14、度。得到以LCD邊緣為限的X范圍,Y范圍.g_ts_range.max_x=865.3+(240-220)/20)*60.53=925.83g_ts_range.min_x=260-(20-0)/20*60.53=199.47g_ts_range.max_y=948.8+(400-380)/20*41.06=989.86g_ts_range.min_y=209.7-(20-0)/20*41.06=168.84 fifthstep:以LCD邊緣為限的X范圍,Y范圍,加上X、Y方向上物理坐標(biāo)的最小值,得到真正的X范圍,Y范圍。g_ts_range.min_x=199.47+0=199.47g_ts

15、_range.max_x=925.83+0=925.83g_ts_range.min_y=168.84+0=168.84g_ts_range.max_y=989.86+0=989.86 這組值寫入校準(zhǔn)數(shù)據(jù).ts_cal_cmd.cur_ts_cal_minx=199.47ts_cal_cmd.cur_ts_cal_maxx=925.83ts_cal_cmd.cur_ts_cal_miny=168.84ts_cal_cmd.cur_ts_cal_maxy=989.865、上報(bào)得到的校準(zhǔn)數(shù)據(jù)input_set_abs_params(free_ts->evb1226_input_dev,ABS

16、_X,199.47,925.83,0,0);input_set_abs_params(free_ts->evb1226_input_dev,ABS_Y,168.84,989.86,0,0);即:input_dev->absmaxABS_X=925.83input_dev->absminABS_X=199.47input_dev->absmaxABS_Y=989.86input_dev->absminABS_Y=168.846、以后點(diǎn)擊觸屏,對(duì)數(shù)據(jù)的處理如下比如再次點(diǎn)擊po(20,20),得到的初始物理坐標(biāo)為x=260,y=210input_dev->absm

17、inABS_X<260<input_dev->absmaxABS_Xx=1023*(260-199.47)/(925.83-199.47)=85.25換算為邏輯坐標(biāo)x=240*85.25/1023=20input_dev->absminABS_Y<210<input_dev->absmaxABS_Y=989.86y=1023*(210-168.84)/(989.86-168.84)=51.3換算為邏輯坐標(biāo)y=400*51.3/1023=20.06可見(jiàn),準(zhǔn)確地得到了校準(zhǔn)。四討論1、默認(rèn)校準(zhǔn)數(shù)據(jù)的curtsminx,curtsmaxx,curtsminy,

18、curtsmaxy怎么填?理論上,這里填入TPdatasheet中標(biāo)稱的Xmin,Xmax,Ymin,Ymax即可。但實(shí)際上,某些TP的偏移非常大,比如上述實(shí)例中,點(diǎn)擊校準(zhǔn)點(diǎn)時(shí),物理坐標(biāo)上報(bào)后得到的邏輯坐標(biāo):點(diǎn)(20,20):上報(bào)坐標(biāo)(260,210)-邏輯坐標(biāo)(61,82)點(diǎn)(220,20)上報(bào)坐標(biāo)(865,200)-邏輯坐標(biāo)(203,78)點(diǎn)(20,380)上報(bào)坐標(biāo)(250,950)-邏輯坐標(biāo)(59,371)可見(jiàn),(61,82)偏離點(diǎn)(20,20)較遠(yuǎn)。校準(zhǔn)程序中往往會(huì)認(rèn)為觸摸點(diǎn)與理論點(diǎn)的偏移應(yīng)在一定范圍內(nèi)才是點(diǎn)中了校準(zhǔn)點(diǎn),這個(gè)例子就有可能認(rèn)為沒(méi)有點(diǎn)中校準(zhǔn)點(diǎn)。為了避免這種情況,開(kāi)發(fā)者在初次填寫這組默認(rèn)校準(zhǔn)數(shù)據(jù)時(shí),建議實(shí)際測(cè)一個(gè)TP的Xmin,Xmax,Ymin,Ymax填入。等校準(zhǔn)程序運(yùn)行一遍后,將計(jì)算得出的g_ts_range.min_x,g_ts_range.max_x,g_ts_range.min_y,g_ts_range.max_y填入這里,就更為準(zhǔn)確了。2、其它校準(zhǔn)算法網(wǎng)上介紹的其它校準(zhǔn)算法,一類也是利用TP的線形特性,求取一個(gè)比值用來(lái)校準(zhǔn)。另一類是用求取線性方程組的方法。設(shè)某點(diǎn)在LCD上的邏輯坐標(biāo)為(XL,YL),在TP上的物理坐標(biāo)為(XP,YP),它們之間有此對(duì)應(yīng)關(guān)系:XL=A*XP+B*YP+C,YL=D*XP+E*YP+

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論