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[4];
|
|
uint8_t calDataOK = 0;
|
|
|
|
Serial.begin(115200);
|
|
Serial.println("starting");
|
|
|
|
tft.init();
|
|
|
|
tft.setRotation(2);
|
|
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, 12) == 12)
|
|
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, 12);
|
|
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;
|
|
}
|
|
}
|
|
|
|
|
|
|