INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
2,8" Touchscreen Display Shield - so gehts
03.06.2018, 17:09
Beitrag #1
2,8" Touchscreen Display Shield - so gehts
Hallo, Smile
und ich freue mich auch über alle die das hier lesen obwohl oder gerade weil es in letzter zeit viele Themen zu Displays gab. Ich habe die meisten davon gelesen oder überflogen und nach dem ich mir gestern auch eines besorgt habe, wollte ich mein wissen einfach mal teilen um damit dem einen oder anderen Hilfesuchenden zu helfen.

Hier ein Link, wo ich das Display her habe.
Hier ein Link, vom Displayhersteller.
Beim Hersteller gibt es auch einen Downloadlink zur recht Mageren Pinbeschreibung und einem Download mit den modifizierten Librarys die man verwenden sollte.

Code:
// Librarys
#include <SPI.h> // für Adafruit_TFTLCD.h und Adafruit_GFX.h
#include <TouchScreen.h>
#include <MCUFRIEND_kbv.h>
//#include <Adafruit_TFTLCD.h> // alternative zu MCUFRIEND_kbv
#include <Adafruit_GFX.h>
Die Adafruit_TFTLCD verwende ich nicht weil die MCUFRIEND_kbv an das Display angepasst ist.

Die Pins des Shield habe ich wie folgt definiert:
Code:
// Touchscreen Pins
#define YP A3  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin
// Display Pins
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
// optional
#define LCD_RESET A4

und Initialisiert habe ich das Shield so:
Code:
// Touchscreen Bereich
#define TS_MINX 100
#define TS_MAXX 920
#define TS_MINY 70
#define TS_MAXY 900
// min. und max. druck auf den Touchscreen
#define MINPRESSURE 10
#define MAXPRESSURE 1000
// Touchscreen Init
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 320); // zwischen XP und XM den wiederstand messen und wert anpassen
TSPoint p;
//Display Init
MCUFRIEND_kbv tft;
//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

void setup(void) {
  tft.reset();
  uint16_t identifier = tft.readID();
  identLCD(identifier); // ausgelagerte Funktion
  tft.begin(identifier);
  tft.setRotation(0);
  tft.fillScreen(BLACK);
  loadBootscreen(); // ausgelagerte Funktion
}
// füllt den Display mit dem Startbildschirm
// und stellt nötige Startparameter ein.
void loadBootscreen() {
  // Umrandung zeichen
  //tft.fillScreen(BLACK);
  tft.drawRect(0, 0, tft.width()-1, tft.height()-1, WHITE);
  // Text ausgeben
  tft.setCursor(40,60); // von links, von oben
  tft.setTextColor(GREEN);
  tft.setTextSize(4);
  tft.print("Arduino");
  showButton(); // erstes Laden des Button, wird normal von checkButton() verwendet.
}

// prüft den Controller typ um init befehl zu wählen
uint16_t identLCD(uint16_t identifier) {
  if(identifier == 0x9325) {
    Serial.println(F("Found ILI9325 LCD driver"));
  } else if(identifier == 0x9328) {
    Serial.println(F("Found ILI9328 LCD driver"));
  } else if(identifier == 0x4535) {
    Serial.println(F("Found LGDP4535 LCD driver"));
  }else if(identifier == 0x7575) {
    Serial.println(F("Found HX8347G LCD driver"));
  } else if(identifier == 0x9341) {
    Serial.println(F("Found ILI9341 LCD driver"));
  }else if(identifier == 0x7783) {
    Serial.println(F("Found ST7781 LCD driver"));
  }else if(identifier == 0x8230) {
    Serial.println(F("Found UC8230 LCD driver"));
  }
  else if(identifier == 0x8357) {
    Serial.println(F("Found HX8357D LCD driver"));
  } else if(identifier==0x0101)
  {    
      identifier=0x9341;
       Serial.println(F("Found 0x9341 LCD driver"));
  }else {
    Serial.print(F("Unknown LCD driver chip: "));
    Serial.println(identifier, HEX);
    identifier=0x9341;
  }
  return identifier;
}
Ich habe das Display und dessen Touchscreen heute mit dem UNO und dem MEGA ausprobiert und man kann problemlos den selben Code für beide Arduino's verwenden weil die Pinbelegung, dank Shield Konstruktion, die selbe ist. Man muss nur ein par Kleinigkeiten beachten wenn man den Touchscreen verwendet. Die Rotation des Display hat nichts mit den Koordinaten des Touchscreen zu tun. Der Touchscreen muss manuell an die Rotation des Display angepasst werden.

Man kann die Touchscreen Koordinaten z.b. in dieser weise an die des Display anpassen:
Code:
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));

außerdem muss man nach dem abfragen des Touchscreens je nach Modell einige der Pins wieder als Output setzen wie ich es hier mache:
Code:
p = ts.getPoint();
  // if sharing pins, you'll need to fix the directions of the touchscreen pins
  //pinMode(XP, OUTPUT);
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
  //pinMode(YM, OUTPUT);
Macht man das nicht, bleibt der Display nach abfrage des Touchscreen weiss.

An dieser Stelle nochmal der Hinweis "Bitte achtet darauf welche Librarys ihr verwendet!" denn ich hatte diverse Versionen installiert, einige über den Library Manager und andere von Github geladen und wunderte mich warum nichts geht.
Ich verwende nun wirklich nur die beiden Librarys vom Hersteller und zusätzlich habe ich nur die Adafruit_GFX Library über den Library Manager und die Adafruit_TFTLCD als Zip nachinstalliert und seit dem geht das Display incl. Touchscreen.

wenn man das alles im Blick hat, sollte das Display laufen und ihr habt euch mindestens einen tag Recherche im Internet gespart. Wink

ach evtl. kann mir noch jemand verraten wie ich sinnvoll abfrage ob ein bestimmter Bereich auf dem Touchscreen geklickt wurde z.b. ein Button.
aktuell mache ich das so:
Code:
if (p.x>42 && p.x<202 && p.y>140 && p.y<220 && buttonEnabled) {
      // mache was zu tun ist
      buttonEnabled = false;
      delay(300); // entprellen des Touchscreen Button
    }
Doch irgendwie sind so viele && Verknüpfungen wohl zu viel, weil p.y<220 nicht beachtet wird.

Ich würde mich freuen wenn ihr eure Codes zu diesem oder baugleichen Displays posten könntet, um mal zu Zeigen was damit noch so möglich ist.

Gruß und noch ein par Bilder als Anhang,
Daniel


Angehängte Datei(en) Thumbnail(s)
           

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.06.2018, 11:57
Beitrag #2
RE: 2,8" Touchscreen Display Shield - so gehts
Danke für die Ausführung, ich denke das Thema ist sehr interessant für einige. Ich selber werde mich auch damit beschäftigen wenn ich mit dem ganzen Thema Arduino weiter bin.

VG Crazy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.07.2018, 15:34
Beitrag #3
RE: 2,8" Touchscreen Display Shield - so gehts
Danke für Deinen Beitrag. Wenn ich den eher gelesen hätte, hätte ich mir viele Stunden suchen und Fragen sparen können. Schon der Hinweis "Bitte achtet darauf welche Librarys ihr verwendet!" hätte mir einiges erspart. In diese Falle bin ich auch schon getappt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.07.2018, 14:16
Beitrag #4
RE: 2,8" Touchscreen Display Shield - so gehts
Freut mich zu hören das dir der Beitrag gefallen hat. Smile
Evtl. willst du ja mal etwas Code und ein Bild zeigen? Damit andere sehen, was du so mit dem Display machst.

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.07.2018, 11:15
Beitrag #5
RE: 2,8" Touchscreen Display Shield - so gehts
Ich bin noch bei den Beispielen die sicher jeder kennt daher würde das nur langweilen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Mega 2560 + USB Host Shield + USB-Stick Cospieler 4 373 19.09.2018 11:17
Letzter Beitrag: Tommy56
  Arduino Nano und 1,3 Zoll IC2 OLED Display ParadoxDev 3 404 27.07.2018 09:57
Letzter Beitrag: hotsystems
  ECU und Display Kommunikation mitlesen Marc2014 4 541 11.07.2018 18:10
Letzter Beitrag: hotsystems
Sad Hilfe bei 2.4 TFT Display Harry Hirsch 68 7.156 10.07.2018 18:17
Letzter Beitrag: Tommy56
  Problem mit TFT Display Anzeige wechseln Thor Wallhall 10 1.577 06.07.2018 20:51
Letzter Beitrag: Thor Wallhall
  TFT Display will nicht so wie ich Franzel007 10 1.250 12.05.2018 09:28
Letzter Beitrag: amithlon
  MP3 VS1053 shield Geeros#18 11 960 15.04.2018 13:37
Letzter Beitrag: hotsystems
  Schrifttypen einbinden für TFT Display Thor Wallhall 35 3.379 05.04.2018 22:24
Letzter Beitrag: Thor Wallhall
  Fehlende Einerstelle auf LCD Display Ardu2018 8 934 26.03.2018 09:45
Letzter Beitrag: Tommy56
  Arduino und Nextion Display Diskusguppy 16 2.054 08.03.2018 02:26
Letzter Beitrag: Diskusguppy

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste