From acd3fe7b85e1c8ed63b38fe441ce2bd95d112c71 Mon Sep 17 00:00:00 2001 From: Bodmer Date: Wed, 25 Oct 2017 01:57:42 +0100 Subject: [PATCH] Add simple touch calibrate and test sketch This one does not need SPIFFS, cal data is embedded in sketch by user. --- .../Touch_calibrate/Touch_calibrate.ino | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 examples/Generic/Touch_calibrate/Touch_calibrate.ino diff --git a/examples/Generic/Touch_calibrate/Touch_calibrate.ino b/examples/Generic/Touch_calibrate/Touch_calibrate.ino new file mode 100644 index 0000000..26475ef --- /dev/null +++ b/examples/Generic/Touch_calibrate/Touch_calibrate.ino @@ -0,0 +1,103 @@ +/* + 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 XPY2046 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 before we calibrate + 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 + boolean pressed = tft.getTouch(&x, &y); + + // Draw a shite 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); +} +