5 #define Z_THRESHOLD 600
6 #define Z_THRESHOLD_INT 75
7 #define MSEC_THRESHOLD 50
8 #define SPI_SETTING SPISettings(2000000, MSBFIRST, SPI_MODE0)
11 Serial.println(
"Touch:begin");
16 pinMode(
csPin, OUTPUT);
17 digitalWrite(
csPin, HIGH);
22 static int16_t
besttwoavg( int16_t x , int16_t y , int16_t z ) {
25 if ( x > y ) da = x - y;
else da = y - x;
26 if ( x > z ) db = x - z;
else db = z - x;
27 if ( z > y ) dc = z - y;
else dc = y - z;
28 if ( da <= db && da <= dc ) reta = (x + y) >> 1;
29 else if ( db <= da && db <= dc ) reta = (x + z) >> 1;
30 else reta = (y + z) >> 1;
40 uint32_t now = millis();
41 if (now -
msraw < MSEC_THRESHOLD)
return;
43 SPI1.beginTransaction(SPI_SETTING);
44 digitalWrite(
csPin, LOW);
46 int16_t z1 = SPI1.transfer16(0xC1 ) >> 3;
48 int16_t z2 = SPI1.transfer16(0x91 ) >> 3;
50 if (z >= Z_THRESHOLD) {
51 SPI1.transfer16(0x91 );
52 data[0] = SPI1.transfer16(0xD1 ) >> 3;
53 data[1] = SPI1.transfer16(0x91 ) >> 3;
54 data[2] = SPI1.transfer16(0xD1 ) >> 3;
55 data[3] = SPI1.transfer16(0x91 ) >> 3;
57 else data[0] = data[1] = data[2] = data[3] = 0;
58 data[4] = SPI1.transfer16(0xD0 ) >> 3;
59 data[5] = SPI1.transfer16(0) >> 3;
60 digitalWrite(
csPin, HIGH);
61 SPI1.endTransaction();
64 if (z < Z_THRESHOLD) {
67 if (z < Z_THRESHOLD_INT) {
68 if (255 !=
tirqPin) isrWake =
false;
78 int16_t x =
besttwoavg( data[0], data[2], data[4] );
79 int16_t y =
besttwoavg( data[1], data[3], data[5] );
83 if (z >= Z_THRESHOLD) {
108 return (
zraw >= Z_THRESHOLD);
129 x = (int16_t)(fx * SCREEN_WIDTH);
130 y = (int16_t)(fy * SCREEN_HEIGHT);
133 return TS_Point(SCREEN_WIDTH-x, SCREEN_HEIGHT-y,
zraw);
static int16_t besttwoavg(int16_t x, int16_t y, int16_t z)