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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem mit TFT Display Anzeige wechseln Thor Wallhall 9 468 02.06.2018 23:30
Letzter Beitrag: Thor Wallhall
Sad Hilfe bei 2.4 TFT Display Harry Hirsch 56 3.284 27.05.2018 22:07
Letzter Beitrag: hotsystems
  TFT Display will nicht so wie ich Franzel007 10 571 12.05.2018 09:28
Letzter Beitrag: amithlon
  MP3 VS1053 shield Geeros#18 11 489 15.04.2018 13:37
Letzter Beitrag: hotsystems
  Schrifttypen einbinden für TFT Display Thor Wallhall 35 2.056 05.04.2018 22:24
Letzter Beitrag: Thor Wallhall
  Fehlende Einerstelle auf LCD Display Ardu2018 8 570 26.03.2018 09:45
Letzter Beitrag: Tommy56
  Arduino und Nextion Display Diskusguppy 16 1.255 08.03.2018 02:26
Letzter Beitrag: Diskusguppy
  Problem mit OLED 0.96" Display torsten_156 5 1.895 07.03.2018 23:27
Letzter Beitrag: Tommy56
  OLED Display 1,3" DonCamillo 1 251 07.03.2018 23:12
Letzter Beitrag: Tommy56
  Arduino Mega mit Shield und 7" Touch Tudorf 10 696 25.02.2018 14:30
Letzter Beitrag: Tommy56

Gehe zu:


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