Да процедуру надо провести. Я делал на есп32.
#include <XPT2046_Touchscreen.h>
#include <SPI.h>
#define CS_PIN 14
// MOSI=11, MISO=12, SCK=13
//T_DO-io23; T_DIN-io19; T_CLK-io18;
//XPT2046_Touchscreen ts(CS_PIN);
//#define TIRQ_PIN 2
XPT2046_Touchscreen ts(CS_PIN); // Param 2 - NULL - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, 255); // Param 2 - 255 - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, TIRQ_PIN); // Param 2 - Touch IRQ Pin - interrupt enabled polling
void setup() {
Serial.begin(38400);
ts.begin();
// ts.begin(SPI1); // use alternate SPI port
ts.setRotation(1);
while (!Serial && (millis() <= 1000));
}
void loop() {
if (ts.touched()) {
TS_Point p = ts.getPoint();
Serial.print("Pressure = ");
Serial.print(p.z);
Serial.print(", x = ");
Serial.print(p.x);
Serial.print(", y = ");
Serial.print(p.y);
delay(100);
Serial.println();
}
}
Тыкал стилусом строго в углы экрана. Получил 4 пары координат: x1=240,y1=289;x1=203,y2=3875;x2=3740,y2=3807;x2=3705,y1=257. Потом усреднял значения x1,x2,y1,y2 и ставил им соответствие от 0 до 239 и от 0 до 319.
Потом экспериментировал с таким вариантом рисовалки:
// ПИКСЕЛЬНАЯ рисовалка 27 цветов
#include "Adafruit_GFX.h" // Библиотека обработчика графики
#include "Adafruit_ILI9341.h" // Программные драйвера для дисплеев ILI9341
#include <XPT2046_Touchscreen.h>// Библиотека для работы с сенсорным экраном
#include <SPI.h>
#define TFT_DC 20 // Пин подключения вывода D/C дисплея
#define TFT_CS 17 // Пин подключения вывода CS дисплея
#define CS_PIN 14
//#define TFT_RST -1 // Пин подключения вывода RESET
//#define TFT_MISO 16 // Пин подключения вывода дисплея SDO(MISO)
//#define TFT_MOSI 19 // Пин подключения вывода дисплея SDI(MOSI)
//#define TFT_CLK 18 // Пин подключения вывода дисплея SCK
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); // Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);//Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой
XPT2046_Touchscreen ts(CS_PIN); // Param 2 - NULL - No interrupts
uint16_t color=tft.color565(255,255,255);
void setup(){
tft.begin(); // Инициализируем начало работы с графическим дисплеем
tft.setRotation(1); // Переводим дисплей в альбомную ориентацию
ts.begin();
ts.setRotation(1);
tft.fillScreen(color);panel();setka();//начальная отрисовка зон экрана
}
void loop()
{
int x, y; // Переменные для работы с координатами нажатий
if(ts.touched()) // Пока имеются данные с сенсорного модуля
{
TS_Point p = ts.getPoint(); // Считываем с него данные
x = map(p.x,220,3720,0,319); // Считываем и преобразуем координату нажатия X
y =map(p.y,275,3830,0,240); // Считываем и преобразуем координату нажатия Y
if((x!=-1) && (y!=-1)) // Если обе координаты в положительном диапазоне (т.е. если есть нажатие)
{
x += 0; // Корректируем координату с учетом калибровочных данных
y += 0; // Корректируем координату с учетом калибровочных данных
//
if(y<20&&x>290){tft.fillRect(0,21,320,240,color);setka();}//стираем рисунок
if(y>20){x=10*(x/10);y=10*(y/10);tft.fillRect(x+1, y+2, 9, 9,color);}//рисуем пиксель выбранным цветом
for(int i=0;i<27;i++){
if(y<20&&x>10*i+15&&x<10*i+25){color=tft.color565(min(180*(i%3),255),min(180*((i/3)%3),255),min(180*((i/9)%3),255));tft.fillCircle(10,10,7,color);}//выбираем цвет рисования и отображаем на индикаторе выбранного цвета
}
//
}
}
delay(30);//
}
////////////////////
void setka(){
for(int j=0;j<32;j++){
tft.drawLine(10*j, 21, 10*j, 239,tft.color565(127,127,127));
}
for(int j=0;j<22;j++){
tft.drawLine(0,21+10*j,319,21+10*j,tft.color565(127,127,127));
}
}
////////////////////
void panel(){
for(int i=0;i<27;i++){
tft.fillRect(10*i+20,0,10,20,tft.color565(min(180*(i%3),255),min(180*((i/3)%3),255),min(180*((i/9)%3),255)));//строка кнопок - отрисовка
}
tft.drawRect(290,0,20, 20,ILI9341_RED );//кнопка стирания рисунка
tft.drawLine(290,0,310, 20,ILI9341_RED );
tft.drawLine(290,20,310, 0,ILI9341_RED );
}