77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
#include "FS.h"
 | 
						|
#include <SPI.h>
 | 
						|
#include <TFT_eSPI.h>
 | 
						|
TFT_eSPI tft = TFT_eSPI();
 | 
						|
 | 
						|
#define CALIBRATION_FILE "/calibrationData"
 | 
						|
 | 
						|
void setup(void) {
 | 
						|
  uint16_t calibrationData[5];
 | 
						|
  uint8_t calDataOK = 0;
 | 
						|
 | 
						|
  Serial.begin(115200);
 | 
						|
  Serial.println("starting");
 | 
						|
 | 
						|
  tft.init();
 | 
						|
 | 
						|
  tft.setRotation(3);
 | 
						|
  tft.fillScreen((0xFFFF));
 | 
						|
 | 
						|
  tft.setCursor(20, 0, 2);
 | 
						|
  tft.setTextColor(TFT_BLACK, TFT_WHITE);  tft.setTextSize(1);
 | 
						|
  tft.println("calibration run");
 | 
						|
 | 
						|
  // check file system
 | 
						|
  if (!SPIFFS.begin()) {
 | 
						|
    Serial.println("formating file system");
 | 
						|
 | 
						|
    SPIFFS.format();
 | 
						|
    SPIFFS.begin();
 | 
						|
  }
 | 
						|
 | 
						|
  // check if calibration file exists
 | 
						|
  if (SPIFFS.exists(CALIBRATION_FILE)) {
 | 
						|
    File f = SPIFFS.open(CALIBRATION_FILE, "r");
 | 
						|
    if (f) {
 | 
						|
      if (f.readBytes((char *)calibrationData, 14) == 14)
 | 
						|
        calDataOK = 1;
 | 
						|
      f.close();
 | 
						|
    }
 | 
						|
  }
 | 
						|
  if (calDataOK) {
 | 
						|
    // calibration data valid
 | 
						|
    tft.setTouch(calibrationData);
 | 
						|
  } else {
 | 
						|
    // data not valid. recalibrate
 | 
						|
    tft.calibrateTouch(calibrationData, TFT_WHITE, TFT_RED, 15);
 | 
						|
    // store data
 | 
						|
    File f = SPIFFS.open(CALIBRATION_FILE, "w");
 | 
						|
    if (f) {
 | 
						|
      f.write((const unsigned char *)calibrationData, 14);
 | 
						|
      f.close();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  tft.fillScreen((0xFFFF));
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void loop() {
 | 
						|
  uint16_t x, y;
 | 
						|
  static uint16_t color;
 | 
						|
 | 
						|
  if (tft.getTouch(&x, &y)) {
 | 
						|
 | 
						|
    tft.setCursor(5, 5, 2);
 | 
						|
    tft.printf("x: %i     ", x);
 | 
						|
    tft.setCursor(5, 20, 2);
 | 
						|
    tft.printf("y: %i    ", y);
 | 
						|
 | 
						|
    tft.drawPixel(x, y, color);
 | 
						|
    color += 155;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 |