104 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
/*
 | 
						|
  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 <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 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);
 | 
						|
}
 | 
						|
 |