Compare commits
2 commits
db38f557a1
...
26b0cd2ab3
| Author | SHA1 | Date | |
|---|---|---|---|
| 26b0cd2ab3 | |||
| c20e8079be |
3 changed files with 50 additions and 18 deletions
|
|
@ -22,8 +22,8 @@
|
||||||
|
|
||||||
#include "XPT2046_TouchscreenSOFTSPI.h"
|
#include "XPT2046_TouchscreenSOFTSPI.h"
|
||||||
|
|
||||||
#define Z_THRESHOLD 400
|
#define Z_THRESHOLD 65
|
||||||
#define Z_THRESHOLD_INT 75
|
#define Z_THRESHOLD_INT 50
|
||||||
#define MSEC_THRESHOLD 3
|
#define MSEC_THRESHOLD 3
|
||||||
#define SPI_SETTING SPISettings(2000000, MSBFIRST, SPI_MODE0)
|
#define SPI_SETTING SPISettings(2000000, MSBFIRST, SPI_MODE0)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -614,31 +614,63 @@ void loop() {
|
||||||
lastTouchX = touchX;
|
lastTouchX = touchX;
|
||||||
lastTouchY = touchY;
|
lastTouchY = touchY;
|
||||||
|
|
||||||
// Long press check: only trigger if finger was held stationary (displacement < 30px)
|
int16_t liveDeltaX = (int16_t)lastTouchX - (int16_t)touchStartX;
|
||||||
int16_t currentDistX = abs((int16_t)lastTouchX - (int16_t)touchStartX);
|
int16_t liveDeltaY = (int16_t)lastTouchY - (int16_t)touchStartY;
|
||||||
int16_t currentDistY = abs((int16_t)lastTouchY - (int16_t)touchStartY);
|
|
||||||
|
|
||||||
if (!longPressHandled && (millis() - touchStartTime > 1000) && currentDistX < 30 && currentDistY < 30) {
|
// FAST LIVE SWIPE DETECTION:
|
||||||
// Long press (> 1s): Open Config Menu immediately!
|
// Trigger immediately as soon as finger moves >= 28px horizontally (no need to lift or press hard)
|
||||||
longPressHandled = true;
|
if (!longPressHandled) {
|
||||||
touchBeep(); // Confirmation chirp
|
if (liveDeltaX < -28 && abs(liveDeltaY) < 85) {
|
||||||
configMenu();
|
// SWIPE LEFT: Page 0 -> Page 1 (Tri-Temperature Screen)
|
||||||
waitForTouchRelease();
|
longPressHandled = true;
|
||||||
lastActivityTime = millis();
|
if (fullScreenCell != -1) {
|
||||||
initScreen();
|
fullScreenCell = -1;
|
||||||
isTouching = false;
|
}
|
||||||
|
if (currentScreenPage == 0) {
|
||||||
|
animateSlideTransition(true);
|
||||||
|
currentScreenPage = 1;
|
||||||
|
initScreen();
|
||||||
|
}
|
||||||
|
waitForTouchRelease();
|
||||||
|
isTouching = false;
|
||||||
|
lastActivityTime = millis();
|
||||||
|
} else if (liveDeltaX > 28 && abs(liveDeltaY) < 85) {
|
||||||
|
// SWIPE RIGHT: Page 1 -> Page 0 (4 Quadrants)
|
||||||
|
longPressHandled = true;
|
||||||
|
if (fullScreenCell != -1) {
|
||||||
|
fullScreenCell = -1;
|
||||||
|
}
|
||||||
|
if (currentScreenPage == 1) {
|
||||||
|
animateSlideTransition(false);
|
||||||
|
currentScreenPage = 0;
|
||||||
|
initScreen();
|
||||||
|
}
|
||||||
|
waitForTouchRelease();
|
||||||
|
isTouching = false;
|
||||||
|
lastActivityTime = millis();
|
||||||
|
} else if ((millis() - touchStartTime > 1000) && abs(liveDeltaX) < 20 && abs(liveDeltaY) < 20) {
|
||||||
|
// Long press (> 1s) held stationary: Open Config Menu immediately!
|
||||||
|
longPressHandled = true;
|
||||||
|
touchBeep(); // Confirmation chirp
|
||||||
|
configMenu();
|
||||||
|
waitForTouchRelease();
|
||||||
|
lastActivityTime = millis();
|
||||||
|
initScreen();
|
||||||
|
isTouching = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Touch / button released
|
// Touch / button released
|
||||||
if (isTouching) {
|
if (isTouching) {
|
||||||
isTouching = false;
|
isTouching = false;
|
||||||
|
|
||||||
if (!longPressHandled) {
|
if (!longPressHandled) {
|
||||||
int16_t deltaX = (int16_t)lastTouchX - (int16_t)touchStartX;
|
int16_t deltaX = (int16_t)lastTouchX - (int16_t)touchStartX;
|
||||||
int16_t deltaY = (int16_t)lastTouchY - (int16_t)touchStartY;
|
int16_t deltaY = (int16_t)lastTouchY - (int16_t)touchStartY;
|
||||||
|
|
||||||
// Check for horizontal swipe gesture (displacement > 45px, mostly horizontal)
|
// Quick flick swipe fallback in case finger was lifted very rapidly
|
||||||
if (deltaX < -45 && abs(deltaY) < 90) {
|
if (deltaX < -25 && abs(deltaY) < 85) {
|
||||||
// SWIPE LEFT: Page 0 -> Page 1 (Tri-Temperature Screen)
|
// SWIPE LEFT: Page 0 -> Page 1 (Tri-Temperature Screen)
|
||||||
if (fullScreenCell != -1) {
|
if (fullScreenCell != -1) {
|
||||||
fullScreenCell = -1;
|
fullScreenCell = -1;
|
||||||
|
|
@ -648,7 +680,7 @@ void loop() {
|
||||||
currentScreenPage = 1;
|
currentScreenPage = 1;
|
||||||
initScreen();
|
initScreen();
|
||||||
}
|
}
|
||||||
} else if (deltaX > 45 && abs(deltaY) < 90) {
|
} else if (deltaX > 25 && abs(deltaY) < 85) {
|
||||||
// SWIPE RIGHT: Page 1 -> Page 0 (4 Quadrants)
|
// SWIPE RIGHT: Page 1 -> Page 0 (4 Quadrants)
|
||||||
if (fullScreenCell != -1) {
|
if (fullScreenCell != -1) {
|
||||||
fullScreenCell = -1;
|
fullScreenCell = -1;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ bool getTouch(uint16_t *x, uint16_t *y) {
|
||||||
TS_Point p = ts.getPoint(tsSoftSpi);
|
TS_Point p = ts.getPoint(tsSoftSpi);
|
||||||
|
|
||||||
// Filter noise: require valid touch pressure and coordinates within active screen
|
// Filter noise: require valid touch pressure and coordinates within active screen
|
||||||
if (p.z < 350) return false;
|
if (p.z < 60) return false;
|
||||||
if (p.x < 150 || p.x > 3850 || p.y < 150 || p.y > 3850) return false;
|
if (p.x < 150 || p.x > 3850 || p.y < 150 || p.y > 3850) return false;
|
||||||
|
|
||||||
int16_t tx = map(p.x, 200, 3700, 0, 320);
|
int16_t tx = map(p.x, 200, 3700, 0, 320);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue