電阻式觸摸屏校準算法分析_第1頁
電阻式觸摸屏校準算法分析_第2頁
電阻式觸摸屏校準算法分析_第3頁
電阻式觸摸屏校準算法分析_第4頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

2、有相似性,即比例一致性。看看對原始坐標的處理: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);可見,對原始坐標,先減去一個0位置的偏移量(x-xmin),然后求得它X范圍上的比率(x-xmin)/(xmax-xmin),再乘以1023,就得到了投射到(01023)上的坐標。再看看校準算法。在以下的討論中,所謂物理坐標,指觸摸屏上的坐標

3、PT;所謂邏輯坐標,指LCD上的坐標PL。LCD的寬度(W)對應TP的X方向,LCD的高度(H)對應TP的Y方向。通過點擊三個校準點Po(x,y),Px(x,y),Py(x,y),我們能得到圖中內層方框的X,Y的物理坐標范圍,即Xm=Px.x-Po.xYm=Py.y-Po.y將此圖投射到LCD上,有如下(物理值->邏輯值)的對應關系:Xl->Lwl,Xm->Lwm,Xr->Lwr,Yb->Lhb,Ym->Lhm,Yt->Lht。根據(jù)TP與LCD的比例一致性,可以這樣計算得到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于是我們的目的達到了:x范圍:xmin=Po.x-Xly范圍:ymin=Po.yYbY<二>代碼實現(xiàn)1、對觸屏上報的物理坐標值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、應用層根據(jù)上報的物理坐標,換算得到對應LCD寬高的邏輯坐標值PL。P

6、Lx=(PTx/1023)*240Ply=(Pty/1023)*4003、校準數(shù)據(jù)的計算過程。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、填入代碼中的默認校準數(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);三實例分析1、第1次使用觸屏,進入圖形校準界面。2、載入默認校準數(shù)據(jù)g_default_cal_data,3、得到3個校準點的物理坐標,用默認校準數(shù)據(jù)參與處理,上報,最后轉換

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

13、:將測到的校準點之邏輯坐標轉化為物理坐標。得到以校準點為限的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:得到每個邏輯格子對應的X、丫的物理寬度。unit_adc_x=(865.3-260)/(220-20)/20)=60.53unit_adc_y=(948.8-209.7)/(380-20)/20)=41.06 forthstep:以校準點為限的X范圍,Y范圍,加上校準點到屏邊緣的距離所對應的物理寬

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方向上物理坐標的最小值,得到真正的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 這組值寫入校準數(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、上報得到的校準數(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、以后點擊觸屏,對數(shù)據(jù)的處理如下比如再次點擊po(20,20),得到的初始物理坐標為x=260,y=210input_dev->absm

17、inABS_X<260<input_dev->absmaxABS_Xx=1023*(260-199.47)/(925.83-199.47)=85.25換算為邏輯坐標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換算為邏輯坐標y=400*51.3/1023=20.06可見,準確地得到了校準。四討論1、默認校準數(shù)據(jù)的curtsminx,curtsmaxx,curtsminy,

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

溫馨提示

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

評論

0/150

提交評論