#include <lvgl.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <XPT2046_Touchscreen.h>

// 引脚定义
#define TFT_CS 5
#define TFT_DC 0
#define TFT_RST 1
#define TFT_BL 4

#define TOUCH_CS2 7
#define TOUCH_IRQ 6

#define SPI_SCK 20
#define SPI_MOSI 21
#define SPI_MISO 10
#define SCREEN_W 240
#define SCREEN_H 320

Adafruit_ILI9341 tft(TFT_CS, TFT_DC, TFT_RST);
XPT2046_Touchscreen ts(TOUCH_CS2); // 校准阶段不使用 IRQ

/* ========= 画十字 ========= */
void drawCross(int x, int y)
{
  tft.fillScreen(ILI9341_BLACK);
  tft.drawLine(x - 15, y, x + 15, y, ILI9341_WHITE);
  tft.drawLine(x, y - 15, x, y + 15, ILI9341_WHITE);
}

TS_Point waitTouch()
{
  while (!ts.touched()) delay(10);
  delay(300); // 去抖
  return ts.getPoint();
}

void setup()
{
  Serial.begin(115200);
  SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);

  tft.begin();
  tft.setRotation(0);
  tft.fillScreen(ILI9341_BLACK);

  ts.begin();
  ts.setRotation(2);

  Serial.println("\n=== XPT2046 Touch Calibration ===");

  TS_Point p;
  int xmin, xmax, ymin, ymax;

  // 左上
  drawCross(20, 20);
  Serial.println("Touch TOP-LEFT");
  p = waitTouch();
  xmin = p.x + 20;
  ymin = p.y + 20;

  // 右上
  drawCross(SCREEN_W - 20, 20);
  Serial.println("Touch TOP-RIGHT");
  p = waitTouch();
  xmax = p.x - 20;
  ymin = (ymin + p.y + 20) / 2;

  // 左下
  drawCross(20, SCREEN_H - 20);
  Serial.println("Touch BOTTOM-LEFT");
  p = waitTouch();
  xmin = (xmin + p.x + 20) / 2;
  ymax = p.y - 20;

  // 右下
  drawCross(SCREEN_W - 20, SCREEN_H - 20);
  Serial.println("Touch BOTTOM-RIGHT");
  p = waitTouch();
  xmax = (xmax + p.x - 20) / 2;
  ymax = (ymax + p.y - 20 ) / 2;

  tft.fillScreen(ILI9341_BLACK);

  Serial.println("\n=== Calibration Result ===");
  Serial.print("X_MIN = "); Serial.println(xmin);
  Serial.print("X_MAX = "); Serial.println(xmax);
  Serial.print("Y_MIN = "); Serial.println(ymin);
  Serial.print("Y_MAX = "); Serial.println(ymax);
  Serial.println("==========================");
}

void loop()
{
}
作者:yuanfun  创建时间:2025-12-30 18:17
最后编辑:yuanfun  更新时间:2025-12-30 18:50
上一篇:
下一篇: