t-hmi add touchhandler class
This commit is contained in:
parent
e8ee3b80c2
commit
e8c2db5642
66
src/TouchHandler.cpp
Normal file
66
src/TouchHandler.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
#include "drivers/displays/display.h"
|
||||
#include "TouchHandler.h"
|
||||
|
||||
// Global variable declaration
|
||||
extern unsigned int lowerScreen;
|
||||
|
||||
|
||||
TouchHandler::~TouchHandler() {
|
||||
}
|
||||
|
||||
TouchHandler::TouchHandler(TFT_eSPI& tft, uint8_t csPin, uint8_t irqPin, SPIClass& spi)
|
||||
: tft(tft), csPin(csPin), irqPin(irqPin), spi(spi), lastTouchTime(0),
|
||||
screenSwitchCallback(nullptr), touch(spi, csPin, irqPin) {
|
||||
|
||||
}
|
||||
|
||||
void TouchHandler::begin(uint16_t xres, uint16_t yres) {
|
||||
spi.begin(TOUCH_CLK, TOUCH_MISO, TOUCH_MOSI);
|
||||
touch.begin(xres, yres);
|
||||
}
|
||||
|
||||
void TouchHandler::setScreenSwitchCallback(void (*callback)()) {
|
||||
screenSwitchCallback = callback;
|
||||
}
|
||||
|
||||
uint16_t TouchHandler::isTouched() {
|
||||
// XXX - move touch_x, touch_y to private and min_x, min_y,max_x, max_y
|
||||
uint16_t touch_x, touch_y, code = 0;
|
||||
|
||||
if (touch.pressed()) {
|
||||
touch_x = touch.RawX();
|
||||
touch_y = touch.RawY();
|
||||
|
||||
// Perform actions based on touch coordinates
|
||||
// if (y < y_min + (y_max - y_min) / 4) {
|
||||
if (touch_x < 200 + (1700 - 200) / 4) {
|
||||
// bottom
|
||||
code = 1;
|
||||
if (debounce())
|
||||
lowerScreen = 3 - lowerScreen;
|
||||
} else {
|
||||
// top
|
||||
code = 2;
|
||||
if (debounce() && screenSwitchCallback) {
|
||||
screenSwitchCallback();
|
||||
}
|
||||
}
|
||||
|
||||
if (code) {
|
||||
if (code == 1)
|
||||
Serial.print("Touch bottom\n");
|
||||
else
|
||||
Serial.print("Touch top\n");
|
||||
}
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
bool TouchHandler::debounce() {
|
||||
unsigned long currentTime = millis();
|
||||
if (currentTime - lastTouchTime >= 2000) {
|
||||
lastTouchTime = currentTime;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
30
src/TouchHandler.h
Normal file
30
src/TouchHandler.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef _TOUCHHANDLER_H_
|
||||
#define _TOUCHHANDLER_H_
|
||||
|
||||
#include <TFT_eSPI.h> // TFT display library
|
||||
#include <xpt2046.h> // https://github.com/liangyingy/arduino_xpt2046_library
|
||||
|
||||
|
||||
class TouchHandler {
|
||||
public:
|
||||
TouchHandler();
|
||||
~TouchHandler();
|
||||
TouchHandler(TFT_eSPI& tft, uint8_t csPin, uint8_t irqPin, SPIClass& spi);
|
||||
void begin(uint16_t xres, uint16_t yres);
|
||||
uint16_t isTouched();
|
||||
void setScreenSwitchCallback(void (*callback)());
|
||||
|
||||
private:
|
||||
bool debounce();
|
||||
TFT_eSPI& tft;
|
||||
XPT2046 touch;
|
||||
uint8_t csPin;
|
||||
uint8_t irqPin;
|
||||
SPIClass& spi;
|
||||
unsigned long lastTouchTime;
|
||||
// unsigned int lower_switch;
|
||||
void (*screenSwitchCallback)();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user