mirror of
https://github.com/Bodmer/TFT_eSPI.git
synced 2025-08-05 05:34:43 +02:00
Add simple touch calibrate and test sketch
This one does not need SPIFFS, cal data is embedded in sketch by user.
This commit is contained in:
103
examples/Generic/Touch_calibrate/Touch_calibrate.ino
Normal file
103
examples/Generic/Touch_calibrate/Touch_calibrate.ino
Normal file
@@ -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 <SPI.h>
|
||||||
|
#include <TFT_eSPI.h> // 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);
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user