本次介紹一下軟件庫XPT2046型號的觸摸屏的使用,該觸摸屏結合ILI9341的LCD顯示屏一起使用(原文請查看零知官網,我們的LCD和觸摸屏已經連接在一起使用的),使用以下示例進行介紹,示例功能為:當觸摸屏按下后,在LCD屏上顯示當前按下的點的坐標值,示例程序代碼如下:
- /**
- * XPT2046 Touch Screen Controller example.
- *
- * @ brief:show the touch point on the LCD screen
- */
- #include <XPT2046_Touchscreen.h>
- #include "ili9341_parallel.h"
- #define CS_PIN 10 // Chip Select pin
- #define irq_pin 14 //IRQ pin
- XPT2046_Touchscreen ts(CS_PIN, irq_pin);
- ili9341_parallel_class tft(15,16,17,18,19,0,1,2,3,4,5,6,9);
- void setup() {
- Serial.begin(9600);
-
- ts.begin(); //Begin TouchScreen.
-
- tft.begin();
- tft.clear(BLACK);
- }
- boolean wastouched = true;
- void loop() {
-
- boolean istouched = ts.touched();
- if (istouched) {
- TS_Point p = ts.getPoint();
- if (!wastouched) {
- tft.drawString(20,180,BLUE,"Touch");
- }
- tft.clear(BLACK);
- tft.drawFrame(100, 150, 200, 230, RED);
- tft.drawString(110,160,GREEN,"X = ");
- char str[20];
- sprintf(str, "%d", p.x);
-
- tft.drawString(150,160,GREEN,str);
- tft.drawString(110,200,GREEN,"Y = ");
- sprintf(str, "%d", p.y);
- tft.drawString(150,200,GREEN,str);
-
- Serial.print(", x = ");
- Serial.print(p.x);
- Serial.print(", y = ");
- Serial.println(p.y);
- } else {
- Serial.println("no touch");
- }
- wastouched = istouched;
- delay(100);
- }
復制代碼 可以看到觸摸屏的使用比較簡單,我們通過SPI接口將觸摸屏的接口與零知開發板相連接即可,然后在程序中通過touched()接口檢測是否有觸摸動作,如果有觸摸再通過getPoint()函數得到觸摸的坐標值。觸摸屏的檢測的時候還可以使用中斷引腳連接到開發板,然后通過檢測中斷是否發生來檢測是否有觸摸動作,該型號的觸摸屏在沒有觸摸的時候中斷腳輸出高電平,如果有觸摸發生會有一段時間的低電平信號。我們連接好硬件后,燒寫上面點的程序到零知開發板,程序運行后,我們用手指觸摸屏幕,可以在顯示屏上顯示我們當前觸摸的坐標值,如下:
Screenshot_20180806-114705.jpg (907.05 KB, 下載次數: 51)
下載附件
2018-8-6 12:09 上傳
需要注意的是觸摸屏的坐標和LCD坐標的轉換,這里XPT2046的觸摸屏為12位的精度,因此坐標范圍為0-4096,而此處ILI9341的LCD坐標范圍為0-240,和0-320,因此需要轉換后兩者才能對應起來,而且還需要注意兩者的原點坐標,這可以通過軟件方式簡單的轉換即可對應起來。當然在實際產品開發中,我們還需要做觸摸屏的校準,這樣得到的觸摸動作才能精確的檢測。
|