Kleine Code Fehler. Bitte mir helfen

#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>

// Pin-Definitionen für das TFT-LCD-Display
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

// Farbdefinitionen
#define BLACK   0x0000
#define WHITE   0xFFFF
#define RED     0xF800
#define GREEN   0x07E0
#define BLUE    0x001F
#define YELLOW  0xFFE0

// Kalibrierungswerte für den Touchscreen (je nach Display variieren)
#define TS_MINX 150
#define TS_MAXX 900
#define TS_MINY 120
#define TS_MAXY 940

// Definition des Touchscreen-Pins
#define YP A3  // muss ein analoger Eingang sein
#define XM A2  // muss ein analoger Eingang sein
#define YM 9   // kann ein digitaler Pin sein
#define XP 8   // kann ein digitaler Pin sein

// Größe des Displays (je nach Display variieren)
#define LCD_WIDTH  320
#define LCD_HEIGHT 240

// Definition des Buttons
#define BUTTON_WIDTH  100
#define BUTTON_HEIGHT 50
#define BUTTON_X      (LCD_WIDTH - BUTTON_WIDTH) / 2
#define BUTTON_Y      (LCD_HEIGHT - BUTTON_HEIGHT) / 2

// Touchscreen-Objekt erstellen
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

// TFT-LCD-Display-Objekt erstellen
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

void setup() {
  // Initialisierung des TFT-LCD-Displays
  tft.reset();
  tft.begin(0x9341);
  tft.setRotation(1);  // Display-Drehung einstellen (0-3 möglich)

  // Hintergrundfarbe des Displays setzen
  tft.fillScreen(BLACK);

  // Button anzeigen
  displayButton();
}

void loop() {
  // Touch-Eingabe abfragen
  TSPoint touch = ts.getPoint();

  // Koordinaten auf das TFT-LCD-Display umrechnen
  pinMode(YP, OUTPUT); // XP und YP als Ausgänge
  pinMode(XM, OUTPUT);
  
  // X- und Y-Koordinaten tauschen
  touch.x = map(touch.y, TS_MINX, TS_MAXX, 0, LCD_WIDTH);
  touch.y = map(touch.x, TS_MINY, TS_MAXY, 0, LCD_HEIGHT);

  // Überprüfen, ob der Button gedrückt wurde
  if (touch.x >= BUTTON_X && touch.x <= BUTTON_X + BUTTON_WIDTH && touch.y >= BUTTON_Y && touch.y <= BUTTON_Y + BUTTON_HEIGHT) {
    // Button gedrückt, Aktion ausführen
    executeAction();
  }
}

void displayButton() {
  // Button-Hintergrund zeichnen
  tft.fillRect(BUTTON_X, BUTTON_Y, BUTTON_WIDTH, BUTTON_HEIGHT, BLUE);
  
  // Button-Text zeichnen
  tft.setTextColor(WHITE);
  tft.setTextSize(2);
  
  int16_t textWidth = 6 * 6;  // 6 ist die geschätzte Breite eines Buchstabens
  int16_t textHeight = 8;  // 8 ist die Höhe des Textes
  
  int16_t textX = BUTTON_X + (BUTTON_WIDTH - textWidth) / 2;
  int16_t textY = BUTTON_Y + (BUTTON_HEIGHT - textHeight) / 2;
  
  tft.setCursor(textX, textY);
  tft.println("Button");
}

void executeAction() {
  // Bildschirminhalt löschen
  tft.fillScreen(BLACK);
  
  // Aktion ausführen
  tft.setTextColor(WHITE);
  tft.setTextSize(3);
  tft.setCursor(10, LCD_HEIGHT / 2 - 10);
  tft.println("Button wurde gedrückt");
  
  // Eine Verzögerung einfügen, um den Bildschirminhalt anzuzeigen
  delay(2000);
  
  // Zurück zum Button gehen
  displayButton();
}


Da ich ein Problem habe bei den Text mittig im Blauen Feld zu platzieren habe und klick ihn an und funktioniert nicht. Was muss ich tun das z.B. das display flackert sobald ich den button Klick ?

No clue as to what you are saying, try posting an annotated schematic and a picture of what you are trying to do. Also include links to technical information on all the hardware devices.

Keine Ahnung, was Sie sagen, versuchen Sie, einen kommentierten Schaltplan und ein Bild von dem, was Sie tun möchten, zu veröffentlichen. Fügen Sie außerdem Links zu technischen Informationen zu allen Hardwaregeräten hinzu.

Poste ein Bild.

So wie du dir das denkst geht es nicht, du zeichnest ein Rechteckt, danach schreibst du da rein. Was Passiert ?
Loop ist eine dauerschleife, also wird dir die Schrift flackern, den die wird bei jedem durchlauf erst gelöscht , danach neu gezeichnet, um das vermeiden, entweder den Button im Setup zeichnen und danach nur die Schrift ändern, oder mit Switch - Case arbeiten.
Noch was, nie den Bildschirme komplett löschen, das dauert zu lange, nur den Bereich, was sich ändert .
Du kannst doch nur die Button beschriftung ändern.
Adafruit (Nicht nur) kann so was

tft.setTextColor(WHITE,BLACK);

setTextColor(Zeichencolor,Hintergrundcolor )

Die Schrift hochskalieren ist auch nicht zu empfehlen bei 3 sieht das nicht schön aus, besser passende Schriftart verwenden, womit aber der Speicher am Uno zu neige geht.

passt bei 3 wahrscheinlich nicht in den Rechteck, habe aber das nicht gezählt.
Habe heute nicht die Möglichkeit was testen == kein TFT + Arduino.

Schau dir mal die Ucglib an die hat ein wenig mehr Schriftarten, ist aber auch ziemlich langsam so wie die Adafruit, ist aber sehr gut dokumentiert.
Für Animationen ist die TFT_eSPI zu empfehlen nur funktioniert nicht mit UNO R3, Mega, ist für ESP, und andere 32 Bit MCU

Der Sketch sieht irgendwie maschinell erzeugt aus.

Oder täuscht das ?

1 Like

mich anschliessend.
(
Und Schuld bin ich vermutlich auch

)

Den Unsinn habe schon mall in irgendeinem Beispiel gesehen,noch vor chatgpt

... was nix zu bedeuten hat. Das komische Ding wurde nur gefüttert und wirft jetzt den ganzen Müll wieder aus. Oft genug wiederholt, ist die Wahrscheinlickeit größer, das uns das noch öfter ereilt :roll_eyes:

Das ist kein "tauschen"!

Tauschen geht so:


int x = 3;
int y = 4;


template<typename T> void swap(T&a,T&b)
{
  T temp = a;
  a = b;
  b = temp;
}

void setup() 
{
  Serial.begin(9600);
  Serial.println(x);
  Serial.println(y);
  swap(x,y);
  Serial.println(x);
  Serial.println(y);
}

void loop() 
{
}

Der Zwischenspeicher, bei mir temp, fehlt bei dir.
Darum gehen die Values kaputt.

Na ja ist ja nur eine Maschine,und so wie du sagst der Unsinn wird wieder wider gezeigt. Zum Glück wird Chatgpt was einmal weniger genutzt, ob das Heise oder Golem war weiß nicht mehr.

Ich habe mir sein Sketch am Laptop angesehen.
Weis nicht wo her der ist, was aber egal ist.
Wo ist die Touch Kalibrierung* berücksichtigt so wie wo ist der an die Rotation* angepasst?
Das Ding Kompiliert zwar aber ob das macht was du willst ist die Frage :wink:

*Kalibrierung -> die Koordinaten x , y vom Touch passen niemals zum Display Koordinaten x0 y0 ist niemals auch wen du das mit map willst anpassen :wink:

 touch.x = map(touch.y, TS_MINX, TS_MAXX, 0, LCD_WIDTH);
  touch.y = map(touch.x, TS_MINY, TS_MAXY, 0, LCD_HEIGHT);
  • Touchrotation -> muss gesetzt werden sonst bei TFT Rotation 1 (Landscape)
    ist x0, x0 bei Toch hinten Rechts

Somit ist dein Sketch zum teil für die Tone, erstmal Touch Kalibrierung vornehmen, werte aufschreiben.

// Touch screen library with X Y and Z (pressure) readings as well
// as oversampling to avoid 'bouncing'
// This demo code returns raw readings, public domain

#include <stdint.h>
#include "TouchScreen.h"

#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3  // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  // a point object holds x y and z coordinates
  TSPoint p = ts.getPoint();
  
  // we have some minimum pressure we consider 'valid'
  // pressure of 0 means no pressing!
  if (p.z > ts.pressureThreshhold) {
     Serial.print("X = "); Serial.print(p.x);
     Serial.print("\tY = "); Serial.print(p.y);
     Serial.print("\tPressure = "); Serial.println(p.z);
  }

  delay(100);
}

Oder was so wie so besser ist die Bibliothek LCDWiki nehmen auch wen dort steht
für 2,4" TFT, funktioniert auch mit 2,8" TFT, Dort ist ach eine Toch Lib weo man die Kalibrierung vornehmen kann
Danach nach der Reiche die Beispiele durchgehen :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.