diff --git a/ESP32_MultiTouch_FT6236/GetTouchEvent/GetTouchEvent.ino b/ESP32_MultiTouch_FT6236/GetTouchEvent/GetTouchEvent.ino new file mode 100644 index 0000000..408fbc0 --- /dev/null +++ b/ESP32_MultiTouch_FT6236/GetTouchEvent/GetTouchEvent.ino @@ -0,0 +1,91 @@ +///////////////////////////////////////////////////////////////// +/* + ESP32 | Multi-Touch Test(ft. FT6236) + Video Tutorial: https://youtu.be/8sp4LKYSdEk + Created by Eric N. (ThatProject) +*/ +///////////////////////////////////////////////////////////////// + +#include +#include + +#define TOUCH_THRESHOLD 80 +#define I2C_SDA 18 +#define I2C_SCL 5 +#define STAR_WIDTH 70 +#define STAR_HEIGHT 80 + +TFT_eSPI tft = TFT_eSPI(); +TFT_eSprite sprImg = TFT_eSprite(&tft); + +FT6236 ts = FT6236(); +unsigned long previousTouchTimestamp = 0; +unsigned long touchCheckInterval = 50; + +void setup(){ + + Serial.begin(115200); + + if (!ts.begin(TOUCH_THRESHOLD, I2C_SDA, I2C_SCL)){ + Serial.println("Unable to start the capacitive touchscreen."); + } + + tft.init(); + tft.setRotation(3); + tft.fillScreen(TFT_BLACK); +} + +void loop() { + getTouchEvent(); +} + +void getTouchEvent(){ + + unsigned long currentTouchTimestamp = millis(); + bool needRefresh = true; + + if (currentTouchTimestamp - previousTouchTimestamp > touchCheckInterval) { + previousTouchTimestamp = currentTouchTimestamp; + + for(int i=0; i< ts.touched(); i++){ + TS_Point p = ts.getPoint(i); + int16_t x = tft.width() - p.y; + int16_t y = p.x; + + drawStar(i, x, y, random(0x10000)); + needRefresh = false; + } + + if(needRefresh) tft.fillScreen(TFT_BLACK); + } +} + +void drawStar(int id, int x, int y, int star_color) +{ + // Create an 8 bit sprite 70x 80 pixels (uses 5600 bytes of RAM) + sprImg.setColorDepth(8); + sprImg.createSprite(STAR_WIDTH, STAR_HEIGHT); + + // Fill Sprite with a "transparent" colour + // TFT_TRANSPARENT is already defined for convenience + // We could also fill with any colour as "transparent" and later specify that + // same colour when we push the Sprite onto the screen. + sprImg.fillSprite(TFT_TRANSPARENT); + + // Draw 2 triangles to create a filled in star + sprImg.fillTriangle(35, 0, 0,59, 69,59, star_color); + sprImg.fillTriangle(35,79, 0,20, 69,20, star_color); + + // Punch a star shaped hole in the middle with a smaller transparent star + sprImg.fillTriangle(35, 7, 6,56, 63,56, TFT_TRANSPARENT); + sprImg.fillTriangle(35,73, 6,24, 63,24, TFT_TRANSPARENT); + + // Push sprite to TFT screen CGRAM at coordinate x,y (top left corner) + // Specify what colour is to be treated as transparent. + + sprImg.drawString((String)id, 0, 0, 4); // Continue printing from new x position + sprImg.pushSprite(x - STAR_WIDTH /2, y - STAR_HEIGHT/2, TFT_TRANSPARENT); + + // Delete it to free memory + sprImg.deleteSprite(); +} \ No newline at end of file