完成了簡單的 I/O 掃瞄方式取得 XPT2046 的 XY 位置數值,便要使用 I/O 中斷(Interrupt / INT)方式來實現讀取 XY 位置數值,主要是 XPT2046 有 IRQ 輸出腳,當觸摸屏被觸碰,便會產生 IRQ 輸出,XPT2046 的 IRQ 會連接到 ESP32 的 GPIO25,GPIO25 腳已經設定後,當觸碰觸摸屏便會觸發 IRQ,然後便會執行中斷程式,讀取 XY 位置數值。
ESP32 XPT2046 電阻式觸摸屏模組 INT 製作 |
// XPT2046 Touch Screen I/O Definition
// XPT2046 CS=Chip Select Pin
#define XPT2046_CS 0
#define XPT2046_CS_0 {GPIO.out_w1tc
= (1 << XPT2046_CS);}
#define XPT2046_CS_1 {GPIO.out_w1ts = (1 << XPT2046_CS);}
//Definitions for T_DI pin Input (MCU Output
MOSI)
#define XPT2046_MOSI 18
#define XPT2046_MOSI_0 {GPIO.out_w1tc
= (1 << XPT2046_MOSI);}
#define XPT2046_MOSI_1 {GPIO.out_w1ts
= (1 << XPT2046_MOSI);}
//Definitions for T_DO pin Output (MCU Input
MISO)
#define XPT2046_MISO 17
#define XPT2046_MISO_IN gpio_get_level(GPIO_NUM_17)
//Definitions for T_CLK pin (SCK) Output
#define XPT2046_SCK 23
#define XPT2046_SCK_0 {GPIO.out_w1tc = (1 << XPT2046_SCK);}
#define XPT2046_SCK_1 {GPIO.out_w1ts = (1 << XPT2046_SCK);}
// XPT2046 Interrupt IRQ
#define XPT2046_IRQ 25
|
ESP32 XPT2046 電阻式觸摸屏模組 INT 程式:
static void IRAM_ATTR gpio_isr_handler(void* arg)
{
uint32_t gpio_num = (uint32_t) arg;
xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL);
}
esp_err_t alink_key_scan(TickType_t ticks_to_wait) {
uint32_t io_num;
while (1) {
xQueueReceive(gpio_evt_queue,
&io_num, ticks_to_wait);
if
((gpio_get_level(io_num) == 0)) {
gpio_intr_disable(XPT2046_IRQ);
gpio_isr_handler_remove(XPT2046_IRQ);
return 1;
}
}
}
void gpio_task_example(void* arg)
{
esp_err_t ret = 0;
while (1) {
ret =
alink_key_scan(portMAX_DELAY);
if (ret
== -1)
vTaskDelete(NULL);
switch
(ret) {
case 1:
xpt2046_readXY(); gpio_set_intr_type(XPT2046_IRQ,
GPIO_INTR_NEGEDGE);
gpio_isr_handler_add(XPT2046_IRQ,
gpio_isr_handler, (void *) XPT2046_IRQ);
break;
default:
break;
}
}
vTaskDelete(NULL);
vTaskDelay(1000 /
portTICK_PERIOD_MS);
}
|
操作系統:Windows 7 64-bit 版本
開發環境:AiThinker05 版本
原程碼: ESP32 ESP-IDF V3.0rc1
程式: DIY-ESP32-033-XTP2046_02_IO_ISR-20181026
ESP32 XPT2046 電阻式觸摸屏模組 INT 程式 |
ESP32 XPT2046 電阻式觸摸屏模組 INT 程式 |
ESP32 XPT2046 電阻式觸摸屏模組 INT 程式 XY 顯示 |
※ DIY - ESP32:OV7670 CMOS VGA 圖像傳感器介紹(十八)
※ DIY - ESP32:OV7670 CMOS VGA 圖像傳感器原理(十九)
※ DIY - ESP32:OV7670 CMOS VGA 圖像傳感器控制(二十)
※ DIY - ESP32:AverLogic AL422B FIFO 晶片介紹(二十一)
※ DIY - ESP32:AverLogic AL422B FIFO 晶片原理(二十二)
※ DIY - ESP32:OV7670 + AL422B FIFO 圖像傳感器模組介紹(二十三)
※ DIY - ESP32:ESP32 + OV7670 + AL422B 攝像頭模組硬件(二十四)
※ DIY - ESP32:ESP32 + OV7670 + AL422B 攝像頭模組程式(二十五)
※ DIY - ESP32:ESP32 XPT2046 電阻式觸摸屏模組電路(二十六)
※ DIY - ESP32:ESP32 XPT2046 電阻式觸摸屏模組 I/O 程式(二十七)
※ DIY - ESP32:ESP32 OV7670 數位靜態相機 DSC 程式(二十九)
2018年 11月 11日 天氣報告
氣溫:24.8度 @ 20:10
相對濕度:百分之 62%
天氣:大致多雲
沒有留言:
張貼留言