Hi
Ich möchte vom Adafruit 2.8 auf das wesentlich günstigere Elegoo 2.8 umsteigen.
ich habe nur ein kleines problem mit der touch erkennung bzw.
das richtige mapping um die touchposition richtig zu ermitteln.
Mit meinem versuchscode habe ich eine darstellung im querformat (Landscape)
Der touch ist aber auf der Linken seite hochkant ![]()
Kann mir jemand weiter helfen das überein zu kriegen ?
bye
#include <Elegoo_GFX.h>
#include <Elegoo_TFTLCD.h>
#include <TouchScreen.h>
// Farbe definieren
#define BLACK 0x0000
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F
// Button 1
#define BUTTON1_X 20
#define BUTTON1_Y 20
#define BUTTON1_W 280
#define BUTTON1_H 40
#define BUTTON1_TEXTSIZE 3
#define FRAME1_X 19
#define FRAME1_Y 19
#define FRAME1_W 282
#define FRAME1_H 42
// Wird benötigt für touchscreen
#define YP A3 // muss ein analog pin sein
#define XM A2 // muss ein analog pin sein
#define YM 9 // kann ein digital pin sein
#define XP 8 // kann ein digital pin sein
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
// Touch ILI9341
#define TS_MINX 120
#define TS_MAXX 900
#define TS_MINY 70
#define TS_MAXY 920
#define LCD_CS A3 // Chip Select Analog 3
#define LCD_CD A2 // Command/Data Analog 2
#define LCD_WR A1 // LCD schreiben Analog 1
#define LCD_RD A0 // LCD lesen Analog 0
#define LCD_RESET A4 // reset pin
Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup() {
Serial.begin(9600);
tft.reset();
tft.begin(0x9341);
tft.setRotation(3); // Darstellung Landscape
tft.setTextSize(3);
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
// feiner roter rahmen um das bild
tft.drawRoundRect(10, 10, 300, 220, 10, RED); //von links, von oben, breite, höhe, radius
// Trennlinie unten
tft.drawLine(10, 165, 308, 165, RED); //von links, von oben, länge, von oben
// Zeichnet den ersten button
// Feiner rahmen um den ersten button
tft.drawRect(FRAME1_X, FRAME1_Y, FRAME1_W, FRAME1_H, WHITE);
// Button 1 den hintergrund ausfüllen
tft.fillRect(BUTTON1_X, BUTTON1_Y, BUTTON1_W, BUTTON1_H, DARKGREY); //von links, von oben, breite, höhe
// Cursor zum schreiben setzen
tft.setCursor(30, 30);
// Text schreiben
tft.println("Test Button");
// Runden weissen kreis zeichnen
tft.fillCircle(275, 40, 16, WHITE); //von links, von oben, durchmesser
// Runden schwarzen kreis zeichnen
tft.fillCircle(275, 40, 15, BLACK); //von links, von oben, durchmesser
#define MINPRESSURE 10
}
void loop() {
// Abfrage ob touch vorliegt
TSPoint p = ts.getPoint();
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE) {
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = (tft.height() - map(p.y, TS_MINY, TS_MAXY, tft.height(), 0));
int x = p.x;
int y = p.y;
Serial.println(x);
Serial.println(y);
if ((x > BUTTON1_X) && (x < (BUTTON1_X + BUTTON1_W))) {
if ((y > BUTTON1_Y) && (y < (BUTTON1_Y + BUTTON1_H))) {
tft.drawRect(FRAME1_X, FRAME1_Y, FRAME1_W, FRAME1_H, RED);
tft.fillCircle(275, 40, 15, GREEN);
delay(60);
tft.drawRect(FRAME1_X, FRAME1_Y, FRAME1_W, FRAME1_H, WHITE);
tft.fillCircle(275, 40, 15, BLACK);
}
}
}
}