Ja habe ich wie oben beschrieben
Lass mich nur wissen was du benötigst. Das meiste ist oben beschrieben und jeweils link dazu zu dem verdrahtungsweg etc
Ist OK wen das Displayschön was anzeigt
Endlich mal jemand, der mich bedauert, wie schön
Das sind die Levelshifter, hat man nicht unbedingt im Kopf
Das verwundert mich nicht, da wie bereits geschrieben, nichts von Touch im Programm zu finden ist. Bei Reichelt gibt es aber eine Anleitung, die etwas anders aussieht, weil der SD-Karteneinschub zu fehlen scheint, dafür aber ein Touch-IC angeschlossen werden kann:
Welches Display hast Du, das mit SD-Karteneinschub oder das mit Touch-IC?
Bei Reichelt gibt es dann auch einen Link zu einem
Programm mit Touch
/**************************************************************************
This is a library for several Adafruit displays based on ST77* drivers.
Works with the Adafruit 1.8" TFT Breakout w/SD card
----> http://www.adafruit.com/products/358
The 1.8" TFT shield
----> https://www.adafruit.com/product/802
The 1.44" TFT breakout
----> https://www.adafruit.com/product/2088
The 1.14" TFT breakout
----> https://www.adafruit.com/product/4383
The 1.3" TFT breakout
----> https://www.adafruit.com/product/4313
The 1.54" TFT breakout
----> https://www.adafruit.com/product/3787
The 1.69" TFT breakout
----> https://www.adafruit.com/product/5206
The 2.0" TFT breakout
----> https://www.adafruit.com/product/4311
as well as Adafruit raw 1.8" TFT display
----> http://www.adafruit.com/products/618
Check out the links above for our tutorials and wiring diagrams.
These displays use SPI to communicate, 4 or 5 pins are required to
interface (RST is optional).
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
MIT license, all text above must be included in any redistribution
**************************************************************************/
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <XPT2046_Touchscreen.h>
#include <SPI.h>
int time = 0;
// These pins will also work for the 1.8" TFT shield.
#define TFT_CS 10
#define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC 8
#define Touch_CS_PIN 2
#define Touch_TIRQ_PIN 3 // MISO-T D12 MISO
// For 1.44" and 1.8" TFT with ST7735 use:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
XPT2046_Touchscreen ts(Touch_CS_PIN, Touch_TIRQ_PIN);
#define TFT_MOSI 11 // Data out
#define TFT_SCLK 13 // Clock out
// For ST7735-based displays, we will use this call
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
// OR for the ST7789-based displays, we will use this call
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
float p = 3.1415926;
void setup(void) {
Serial.begin(9600);
// Serial.print(F("Hello! ST77xx TFT Test"));
ts.begin();
ts.setRotation(1);
// Use this initializer if using a 1.8" TFT screen:
//tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
// OR use this initializer if using a 1.8" TFT screen with offset such as WaveShare:
tft.initR(INITR_GREENTAB); // Init ST7735S chip, green tab
// OR use this initializer (uncomment) if using a 1.44" TFT:
//tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab
// OR use this initializer (uncomment) if using a 0.96" 160x80 TFT:
//tft.initR(INITR_MINI160x80); // Init ST7735S mini display
// OR use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
//tft.init(240, 240); // Init ST7789 240x240
// OR use this initializer (uncomment) if using a 1.69" 280x240 TFT:
//tft.init(240, 280); // Init ST7789 280x240
// OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
//tft.init(240, 320); // Init ST7789 320x240
// OR use this initializer (uncomment) if using a 1.14" 240x135 TFT:
//tft.init(135, 240); // Init ST7789 240x135
// OR use this initializer (uncomment) if using a 1.47" 172x320 TFT:
//tft.init(172, 320); // Init ST7789 172x320
// SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here
// Note that speed allowable depends on chip and quality of wiring, if you go too fast, you
// may end up with a black screen some times, or all the time.
//tft.setSPISpeed(40000000);
//Serial.println(F("Initialized"));
//uint16_t time = millis();
//tft.fillScreen(ST77XX_BLACK);
//time = millis() - time;
// Serial.println(time, DEC);
//delay(500);
// large block of text
tft.fillScreen(ST77XX_BLACK);
tft.fillScreen(ST77XX_BLACK);
delay(500);
tft.fillScreen(ST77XX_RED);
delay(500);
tft.fillScreen(ST77XX_BLUE);
delay(500);
tft.fillScreen(ST77XX_GREEN);
delay(500);
tft.fillScreen(ST77XX_WHITE);
delay(500);
}
void loop() {
// tft.invertDisplay(true);
// delay(500);
// tft.invertDisplay(false);
// delay(500);
if (ts.touched()) {
TS_Point p = ts.getPoint();
Serial.print("x = ");
Serial.println(p.x);
Serial.print("y = ");
Serial.println(p.y);
delay(80);
time++;
if (time == 1) { tft.fillScreen(ST77XX_RED); }
if (time == 2) { tft.fillScreen(ST77XX_BLUE); }
if (time == 3) { tft.fillScreen(ST77XX_GREEN); }
if (time == 4) {
tft.fillScreen(ST77XX_WHITE);
time = 0;
}
}
}
void testlines(uint16_t color) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x = 0; x < tft.width(); x += 6) {
tft.drawLine(0, 0, x, tft.height() - 1, color);
delay(0);
}
for (int16_t y = 0; y < tft.height(); y += 6) {
tft.drawLine(0, 0, tft.width() - 1, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x = 0; x < tft.width(); x += 6) {
tft.drawLine(tft.width() - 1, 0, x, tft.height() - 1, color);
delay(0);
}
for (int16_t y = 0; y < tft.height(); y += 6) {
tft.drawLine(tft.width() - 1, 0, 0, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x = 0; x < tft.width(); x += 6) {
tft.drawLine(0, tft.height() - 1, x, 0, color);
delay(0);
}
for (int16_t y = 0; y < tft.height(); y += 6) {
tft.drawLine(0, tft.height() - 1, tft.width() - 1, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x = 0; x < tft.width(); x += 6) {
tft.drawLine(tft.width() - 1, tft.height() - 1, x, 0, color);
delay(0);
}
for (int16_t y = 0; y < tft.height(); y += 6) {
tft.drawLine(tft.width() - 1, tft.height() - 1, 0, y, color);
delay(0);
}
}
void testdrawtext(char *text, uint16_t color) {
tft.setCursor(0, 0);
tft.setTextColor(color);
tft.setTextWrap(true);
tft.print(text);
}
void testfastlines(uint16_t color1, uint16_t color2) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t y = 0; y < tft.height(); y += 5) {
tft.drawFastHLine(0, y, tft.width(), color1);
}
for (int16_t x = 0; x < tft.width(); x += 5) {
tft.drawFastVLine(x, 0, tft.height(), color2);
}
}
void testdrawrects(uint16_t color) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x = 0; x < tft.width(); x += 6) {
tft.drawRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2, x, x, color);
}
}
void testfillrects(uint16_t color1, uint16_t color2) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x = tft.width() - 1; x > 6; x -= 6) {
tft.fillRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2, x, x, color1);
tft.drawRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2, x, x, color2);
}
}
void testfillcircles(uint8_t radius, uint16_t color) {
for (int16_t x = radius; x < tft.width(); x += radius * 2) {
for (int16_t y = radius; y < tft.height(); y += radius * 2) {
tft.fillCircle(x, y, radius, color);
}
}
}
void testdrawcircles(uint8_t radius, uint16_t color) {
for (int16_t x = 0; x < tft.width() + radius; x += radius * 2) {
for (int16_t y = 0; y < tft.height() + radius; y += radius * 2) {
tft.drawCircle(x, y, radius, color);
}
}
}
void testtriangles() {
tft.fillScreen(ST77XX_BLACK);
uint16_t color = 0xF800;
int t;
int w = tft.width() / 2;
int x = tft.height() - 1;
int y = 0;
int z = tft.width();
for (t = 0; t <= 15; t++) {
tft.drawTriangle(w, y, y, x, z, x, color);
x -= 4;
y += 4;
z -= 4;
color += 100;
}
}
void testroundrects() {
tft.fillScreen(ST77XX_BLACK);
uint16_t color = 100;
int i;
int t;
for (t = 0; t <= 4; t += 1) {
int x = 0;
int y = 0;
int w = tft.width() - 2;
int h = tft.height() - 2;
for (i = 0; i <= 16; i += 1) {
tft.drawRoundRect(x, y, w, h, 5, color);
x += 2;
y += 3;
w -= 4;
h -= 6;
color += 1100;
}
color += 100;
}
}
void tftPrintTest() {
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.println("Hello World!");
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(3);
tft.println("Hello World!");
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(4);
tft.print(1234.567);
delay(1500);
tft.setCursor(0, 0);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(0);
tft.println("Hello World!");
tft.setTextSize(1);
tft.setTextColor(ST77XX_GREEN);
tft.print(p, 6);
tft.println(" Want pi?");
tft.println(" ");
tft.print(8675309, HEX); // print 8,675,309 out in HEX!
tft.println(" Print HEX!");
tft.println(" ");
tft.setTextColor(ST77XX_WHITE);
tft.println("Sketch has been");
tft.println("running for: ");
tft.setTextColor(ST77XX_MAGENTA);
tft.print(millis() / 1000);
tft.setTextColor(ST77XX_WHITE);
tft.print(" seconds.");
}
void mediabuttons() {
// play
tft.fillScreen(ST77XX_BLACK);
tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
delay(500);
// pause
tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
delay(500);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
delay(50);
// pause color
tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}
Das scheint mir ein Beispiel-Programm der Adafruit-Bibliothek zu sein.
Als allgemeiner Tipp: Bei UNO/Nano/ProMini mußt Du auf die Speichernutzung aufpassen, bei so einem Display kann das schnell mal eng werden. µCs mit 3,3 V gibt es mit mehr Speicher und Du sparst Dir die Levelshifter.
Da ich ein solches Display nicht habe, ist jetzt @fony wieder am Zug
das ist nicht die Verdrahtung die ich benutze ich benutze die ohne sd Karte
Ich kann dir sofort sagen mit Nano wird das alles knapp wir können versuchen ob klappt.
Wenn möglich besorge dir rin ESP 32 ist nicht viel größer als Nano.
Hasse am Telefon schreiben
Den gibt es auch kleiner als der Nano. Z.B. der ESP32-C3.
Oder einen ESP8266-12E.
Ich würde erstmal gerne überhaupt das Programm fertig bekommen, dass es funktionieren würde und dann erstmal mit dem Nano probieren. Wird ja dann angezeigt, ob der Speicher nicht ausreicht
Mit dem Ic Treiber. Genau das Display hab ich was ich oben über reichelt verlinkt habe
Nur nicht die für Anfänger
Wenn es darum geht, ist das alles nicht anfägerfreundlich.
Ein Uno und ein HD44780 1602 LCD sind da deutlich besser anfängerfreundlich.
Und mit ein wenig Eigeninitiative bekommt das ein Anfänger auch selbst hin ohne andere um Sketch zu fragen.
Und daraus lernt man auch deutlich besser.
Was macht dann das "Programm mit Touch" auf Deinem Display?
Ja gut ist halt schwierig wollte mich da rantrauen. Hab mir vorher Videos angeschaut bissle und dann mal einfach ein Display bestellt was mir nur optisch gefallen hat wusste ja nicht das es so schlimm wird und kompliziert habe mir schon unterschiedliche Videos angeschaut darüber werde aber komplett nicht schlau daraus. Mal eine Frage was ich mich dauernd Frage kann ich egal z.B jetzt in meinem Fall für mein Display die unterschiedlichsten Libaries verwenden ? Würde mich freuen wenn einer von euch mir helfen könnte ein Programm zu schreiben, dann lerne ich das durch euch.Mein Hintergrund ist halt ich will das Touch Display verwenden um mehrere Buttons darauf zu haben und damit nur Ausgänge zu schalten.Ich benötige das für eine Modelleisenbahn und will dort Motoren und so dann ansteuern durch Touch aber das schaffe ich dann selber mit den Motoren.
Dort ist ein Button abgebildet dort steht drauf Button und darunter ist ein Feld wo dann High steht wollte nur testen ob ich dann auch eine Rückmeldung habe ob der Ausgang dann auch high ist
Ich wäre auch bereit mir ein neues Display zu kaufen, bräuchte nur jemand der mir das beibringen kann zu programmieren oder der mit mir ein Programm schreibt. Fande es nur schade ein neues eventuell zu kaufen weil ich schon jetzt eins besitze.
NEIN.
Du lernst es, wenn du es selbst schreibst.
Und die meisten YT-Videos kannst du eh vergessen, da diese oft fehlerhaft sind und in der Praxis nicht funktionieren.
Nimm dir die Beispiele in den Libraries zu den genutzten Produkten und setze die selbst funktionsfähig zusammen. Nur so lernst du das Programmieren mit Arduino.
Wenn du dann Fragen hast, die bekommst du hier sicher und funktionstüchtig beantwortet.
Grad in der Anfangsphase ist es wichtig, Ersatz zu haben. Es geht schnell mal etwas kaputt, weil das spezielle Wissen noch fehlt.
Ich habe mittlerweile auch ein paar mehr Displays hier liegen.
Wie geschrieben abwarten, habe auch ein 1,8 Display nur ohne Touch was aber kein Problem ist, wird auf größeren simuliert. Frage wird ein Relais oder mehrere genutzt?
Kannst du mir den Link schicken welche Beispiele du meinst?
Wie meinst du das?