/* Sketch to generate the setup() calibration values, these are reported to the Serial Monitor. The sketch has been tested on the ESP8266 and screen with XPT2046 driver. */ #include #include // Hardware-specific library TFT_eSPI tft = TFT_eSPI(); // Invoke custom library //------------------------------------------------------------------------------------------ void setup() { // Use serial port Serial.begin(115200); // Initialise the TFT screen tft.init(); // Set the rotation to the orientation you wish to use in your project before calibration // (the touch coordinates returned then correspond to that rotation only) tft.setRotation(1); // Calibrate the touch screen and retrieve the scaling factors touch_calibrate(); /* // Replace above line with the code sent to Serial Monitor // once calibration is complete, e.g.: uint16_t calData[5] = { 286, 3534, 283, 3600, 6 }; tft.setTouch(calData); */ // Clear the screen tft.fillScreen(TFT_BLACK); tft.drawCentreString("Touch screen to test!",tft.width()/2, tft.height()/2, 2); } //------------------------------------------------------------------------------------------ void loop(void) { uint16_t x = 0, y = 0; // To store the touch coordinates // Pressed will be set true is there is a valid touch on the screen bool pressed = tft.getTouch(&x, &y); // Draw a white spot at the detected coordinates if (pressed) { tft.fillCircle(x, y, 2, TFT_WHITE); //Serial.print("x,y = "); //Serial.print(x); //Serial.print(","); //Serial.println(y); } } //------------------------------------------------------------------------------------------ // Code to run a screen calibration, not needed when calibration values set in setup() void touch_calibrate() { uint16_t calData[5]; uint8_t calDataOK = 0; // Calibrate tft.fillScreen(TFT_BLACK); tft.setCursor(20, 0); tft.setTextFont(2); tft.setTextSize(1); tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.println("Touch corners as indicated"); tft.setTextFont(1); tft.println(); tft.calibrateTouch(calData, TFT_MAGENTA, TFT_BLACK, 15); Serial.println(); Serial.println(); Serial.println("// Use this calibration code in setup():"); Serial.print(" uint16_t calData[5] = "); Serial.print("{ "); for (uint8_t i = 0; i < 5; i++) { Serial.print(calData[i]); if (i < 4) Serial.print(", "); } Serial.println(" };"); Serial.print(" tft.setTouch(calData);"); Serial.println(); Serial.println(); tft.fillScreen(TFT_BLACK); tft.setTextColor(TFT_GREEN, TFT_BLACK); tft.println("Calibration complete!"); tft.println("Calibration code sent to Serial port."); delay(4000); }