網頁最後修改時間:2016/05/12
繼續往下看之前,請一定要先移動一下滑鼠到這個網頁看一下,了解電阻式與電容觸模螢幕最大的差異之處,以及優缺點:三大觸控螢幕主流技術圖解
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
這個液晶螢幕的使用需要使用賣場改寫的函式庫與範例程式碼,不然執行時圖型、字型方向與顯示都會出現問題,即便使用原廠所提供的函式庫也是一樣 !
如果有遇到這個問題的使用者,可以參考 ILI932# 的資料手冊。雖然晶片支援的解析度不一樣,但是可以作為修改的參考,因為絕大部分的暫存器設定是相同的,只要注意一下螢幕顯示方向的部分,就可以解決大部分的問題,但要花一些時間做測試,提供給手邊有此零件的使用者做參考。
有購買商品的使用者,網頁中所需相關資料已放置於雲端硬碟,請根據網頁中所提的資訊下載相關程式碼做測試。
其餘的使用者,網頁有提供範例程式碼可供下載。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
*********************************************************************************
2.8吋(400x240)電阻式觸摸液晶螢幕可至露天賣場訂購:
*********************************************************************************
硬體環境:
- 2.8 吋 (400x240) 電阻式觸模液晶螢幕
- Arduino UNO
軟體環境:
- 安裝編輯環境:Arduino IDE 1.6.5-r5, Arduino IDE 1.6.8
- 安裝液晶螢幕函式庫:
Streaming
程式碼預設開啟除錯功能。不使用就//define DEBUG
--------------------------------------
TFTLCD-mPm
檔案位於 {雲端硬碟}/arduino/codes/libraries
確認 {My Documents}/Arduino/libraries 沒有其他的 TFTLCD 函式庫,不然會造成編譯時候的衝突或是出現編譯錯誤 !
上面注意事項沒問題後,下載 TFTLCD-mPm.zip 後直接解壓縮到 {My Documents}\Arduino\libraries 目錄下,會產生一個 TFTLCD-mPm 的資料夾,裡面會包含下面幾個檔案
TFTLCD-mPm 函式庫檔案列表 |
- 程式碼:TFTLCDScreen_Calibrarion
下載 {雲端硬碟}/arduino/codes/TFTLCDScreen_Calibration 整個目錄,並解壓縮到 {My Documents}/Arduino/ 目錄下
因為到現在個人認為用的最穩定的 Arduino IDE 版本是 1.6.5-r5 ! 如果之前在 Arduino IDE 寫程式編譯上傳成功,但是出現奇怪執行現象時,可以先換版本編譯再上傳試試,或許就會意料中的結果,而不是意想不到的 !
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
操作說明:
液晶螢幕的觸摸功能校正分為三個畫面:
- 操作說明畫面
- 觸摸邊界設定畫面
- 校正結果畫面
程式執行之後會出現第一個白底黑字的操作說明頁,直接按下進入第二個畫面。
進入第二個畫面後,第一次校正千萬不要像我一樣使用手指按畫面上的那 8 個位置做校正,那是我圖方便與快速做的錯誤示範。電阻式觸摸螢幕校正正確需要用到觸碰筆 (需要前方有小圓點的),筆尖的地方要越準確越好的在螢幕上的 8 點 + 號點交叉處點下去。成功點下去且 Arduino 有抓到訊號,就會出現 HOLD! 要使用者繼續保持按下的狀態,直到螢幕出現 RELEASE 再放掉,跟著影片中的順序完成 8 個點的位置輸入。
*********************************************************************************
[ NOTE ]
使用觸碰筆做校正,由於位置在比較邊緣的地方,有時不會一次點擊就會成功,有時需要嘗試多次才會成功。記得要對準 + 中間再點下去,點下去的時候要持續並且注意螢幕中間有無出現 HOLD!,如果維持的時間有一點又沒有出現 HOLD!,那就重新再嘗試一次讓 Arduino 重新抓取訊號。
*********************************************************************************
所有的位置都輸入之後,就會自動切換到最後一個校正結果畫面,這就是我們要的數據 !
校正的越好,觸摸功能會發揮得越好 !
下面就開始比較制式的說明。因為測試程式碼可以下載,所以只挑重點講,如果不想看的話,就跳到最後面看取得數據那部份就行了 !
座標轉換:
我覺得這一節取這個標題,應該會讓一些人直接轉動滑鼠到其他地方吧 !
其實我也不想呀 ! 但是如果這是每一本書的第一章,想必老師都會先教吧 ? 不然怎麼知道後面其他章內容大概是什麼 !
看起來有點深度,其實只是需要解釋的東西,不需要什麼數學運算,重點是在校正之後的數值。
電阻式觸摸液晶螢幕依照上面提供的連結來說明 (注意畫底線的部分) 可以了解:
電阻式螢幕在兩層導電層之間有電壓差異,形成一個電場;按壓時會讓上下層的電極接觸,造成短路和電阻改變,此時控制器測得面板電壓變化,而計算出接觸點位置、進而輸入對應指令。簡單來說,使用者觸摸螢幕表面時,上層受到手指或筆尖的壓力略微下凹、與下層接觸;電腦透過電阻變化,反推出接觸點在哪裡、代表什麼功能。所以說,電阻式觸摸液晶螢幕就是在螢幕上方嵌入了可變電阻,只要能知道電阻的大小就能知道手指在螢幕上觸摸的位置。對於這片液晶螢幕來說 ( 跟影片上螢幕放置的方向一樣 ),USB 埠在右下方,觸摸座標的原點位於左下方是固定不變的,這一點非常重要 !
因為電阻式螢幕透過壓力操控,所以不一定要用手來控制,筆、信用卡等都可以操作,即使戴上手套也沒關係;不過如果「摸」得太輕,電阻式螢幕不會有反應,要用輕戳才行。
觸摸座標原點 |
所以若是要在圖形中啟用觸摸功能,就需要將觸摸座標轉換到圖形座標,才能得知使用者要按下的圖形是哪一個 ? 關於這部分更詳細的說明,請參考部落格另一篇網頁 "{ 2.8 吋 (400x240) 電阻式觸模液晶螢幕使用說明 } [ 3/4 ] - 塗鴉板:圖形與觸摸功能的結合"。
量測阻抗提高觸摸力度的精確度:
電阻式的觸摸螢幕,觸摸時需要力度,所以在程式碼中可以看到這四條線與 Arduino UNO 連接腳位的定義。
TFTLCDScreen_Calibration.ino, line 55 - 63
#define YP A1 //[A1], A3 for ILI9320, A2 for ST7789V #define YM 7 //[ 7], 9 , 7 #define XM A2 //[A2], A2 for ILI9320, A1 for ST7789V #define XP 6 //[ 6], 8 , 6 // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one (FT1509) we're using, its 740 ohms across the X plate TouchScreen tscr = TouchScreen(XP, YP, XM, YM, 740);
拿出電表量測 (Arduino UNO) <A2> 與 <D6> 之間的電阻,盡量調整電阻擋位越小越好,重複量測且維持一段時間等數據穩定,然後將此值輸入到上面程式碼最後一行的最後一個參數中;我手邊這片量到的數值是 740 Ohm。
電阻式的觸摸取值是透過 TouchScreen.getpoint() 函式,有想要研究的再進入函式去看。
取得校正數值:
每一個點的校正必須跟影片中的順序一樣,才能讓取得的這些點可以用來計算正確的左、上、右和下邊界。
TouchScreen_Calibration.ino, line 371 - 381
if ((TOUCH_ORIENTATION == PORTRAIT) ^ (swapxy != 0)) { clx = (rx[0] + rx[1] + rx[2]) / 3; crx = (rx[5] + rx[6] + rx[7]) / 3; cty = (ry[0] + ry[3] + ry[5]) / 3; cby = (ry[2] + ry[4] + ry[7]) / 3; } else { clx = (ry[0] + ry[1] + ry[2]) / 3; crx = (ry[5] + ry[6] + ry[7]) / 3; cty = (rx[0] + rx[3] + rx[5]) / 3; cby = (rx[2] + rx[4] + rx[7]) / 3; }
最後跳到 done() 函式完成所有數據的輸出。而在最後一個畫面裡,中間那一個才是我們所需要的數值 ( 也就是下面紅字的四個值 )。將位於 (LEFT - RT) 的數值映射到 0 - 400 (螢幕長邊),而將位於 (TOP - BOT) 的數值映射到 0 - 240;這些映射的結果將會與液晶螢幕顯示的方向有關,後面相關的部落格網頁會再提到。
Sketch is LANDSCAPE 400 x 240
LEFT 242 RT 970 -2.61
TOP 872 BOT 244 -1.81
觸摸螢幕校正結果 |
校正輸出 Log |
雖然程式碼落落長 !但是絕大部分都是在螢幕上顯示線條與文字,這些我都已經重新調好,不需要再改維持現狀就好。但是重這個程式碼範例可以學到線條、文字顯示的函式使用方法,有需要用到可以深入看一下。
接下來我們利用這一篇所得到的數值,繼續下一篇結合液晶螢幕與觸摸功能的說明。
<<部落格相關網頁連結>>
- { 2.8 吋 (400x240) 電阻式觸模液晶螢幕使用說明 } [ 1/4 ] - 液晶螢幕自我測試程式
- { 2.8 吋 (400x240) 電阻式觸模液晶螢幕使用說明 } [ 2/4 ] - 如何校正電阻式液晶螢幕
- { 2.8 吋 (400x240) 電阻式觸模液晶螢幕使用說明 } [ 3/4 ] - 塗鴉板:圖形與觸摸功能的結合
- { 2.8 吋 (400x240) 電阻式觸模液晶螢幕使用說明 } [ 4/4 ] - 如何讀取 MicroSD 卡中的圖片與在液晶螢幕上顯示
- 2.8 吋 (400x240) 電阻式觸模液晶螢幕函式庫版本更新 - 修正 Arduino Mega 2560 支援的問題與範例使用說明
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !