Probleme mit flackerndem Display

Hallo zusammen,

Kurz zu mir Mein Name ist Mathias, 44 Jahre, Grob aus der Nähe vonm Dortmund.

ich bin ganz neu hier und ziemlich neu im programmieren.
Jetzt benötige ich wohl eure Hilfe.

Bisher hab ich einige kleinere Projekte dank guten Beispielen und viel Code übernehmen hinbekommen.
Jetzt baue ich eine Uhr oder auch einen Wecker der sich Zeit und Datum aus dem Netz holt,
Die Uhr zeigt Nachts einfsch nur "Schlaf weiter" an und keine Uhrzeit.
Ist ein Geschenk für eine Freundin, die Probleme mit dem wieder Einschlafen hat, wenn sie erstmal die Uhrzeit gesehen hat.

Es klappt auch alles so wie ich es geplant habe, nur wird das Display mit jedem loop durchlauf aktualisiert. Dadurch flackert es furchtbar.
Ich habe keine Ahnung, wie ich das beheben kann, außer durch ein Delay am Ende des Codes. Das ist aber nicht schön finde ich und es flackert ja trotzdem im delay tackt.

hier mal der Code den ich bisher zusammen gewürfelt habe.

#include "time.h"
//#include <SPI.h>
#include <TFT_eSPI.h>
#include <WiFiMulti.h>
#include "Arduino.h"

WiFiMulti wifiMulti;


TFT_eSPI tft = TFT_eSPI();  // Invoke library, pins defined in User_Setup.h

float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;  // Saved H, M, S x & y multipliers
float sdeg = 0, mdeg = 0, hdeg = 0;
uint32_t targetTime = 0;  // for next 1 second timeout

bool initial = 1;
static uint8_t conv2d(const char* p) {
  uint8_t v = 0;
  if ('0' <= *p && *p <= '9')
    v = *p - '0';
  return 10 * v + *++p - '0';
}


uint8_t hh = conv2d(__TIME__), mm = conv2d(__TIME__ + 3), ss = conv2d(__TIME__ + 6);  // Get H, M, S from compile time


// statischeIP = false -> IP-Adresse über DHCP vergeben
// statischeIP = true -> statische IP festlegen
// ip und gateway müssen an das lokale Netz angepasst werden
bool statischeIP = true;
IPAddress ip(192, 168, 0, 200);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

/*
  öffentliche DNS-Server
  -----------------------------------------------
  OpenDNS 208, 67, 222, 222 (USA)
  Google 8, 8, 8, 8 (USA)
  Cloudfare 1, 1, 1, 1 (USA)
  DNSWWatch 84, 200, 69, 80 (Deutschland)
  Quad9 9, 9, 9, 9 (Schweiz)
  Neustar UltraDNS 56, 154, 70, 3 (USA, gefiltert)
  Deutsche Telekom 217, 5,100,185
  ------------------------------------------------
  oder die im Router eingetragene IP
  im Beispiel: 192, 168, 1, 20
*/
IPAddress primaryDNS(217, 5, 100, 152);
IPAddress secondaryDNS(9, 9, 9, 9);

// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"

/*
  Liste der Zeitzonen
  https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
  Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
  CEST = Central European Summer Time von
  M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
  bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"

// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;

/* 
  Struktur tm
  tm_hour -> Stunde: 0 bis 23
  tm_min -> Minuten: 0 bis 59
  tm_sec -> Sekunden 0 bis 59
  tm_mday -> Tag 1 bis 31
  tm_wday -> Wochentag (0 = Sonntag, 6 = Samstag)
  tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
  tm_year -> Jahre seit 1900
  tm_yday -> vergangene Tage seit 1. Januar des Jahres
  tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;



void setup() {

  targetTime = millis() + 1000;
  // Zeitzone: Parameter für die zu ermittelnde Zeit
  configTzTime(Zeitzone, Zeitserver);


  Serial.begin(115200);
  tft.begin();
  {
    tft.init();
    tft.setRotation(-45);
    tft.setCursor(30, 8, 6);
    tft.fillScreen(TFT_BLACK);
    tft.setTextColor(TFT_GREEN, TFT_BLACK);  // Adding a black background colour erases previous text automatically
  }


  wifiMulti.addAP("ABC", "123");
  wifiMulti.addAP("DEF", "456");
  wifiMulti.addAP("GHI", "789");

  Serial.println("Connecting Wifi...");
  if (wifiMulti.run() == WL_CONNECTED) {
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}
void loop() {

  uint16_t t_x = 0, t_y = 0;
  bool pressed = tft.getTouch(&t_x, &t_y);
  if (pressed) {
    tft.fillScreen(TFT_BLACK);
    tft.print("Test");
    Serial.println("X= " + String(t_x) + " | Y= " + String(t_y));
  }


  time(&aktuelleZeit);

  // localtime_r -> Zeit in die lokale Zeitzone setzen
  localtime_r(&aktuelleZeit, &Zeit);

  // es kann bis zu 30 Sekunden dauern
  // bis die Zeit ermittelt wird
  tft.fillScreen(TFT_BLACK);
  tft.setCursor(15, 20, 4);
  tft.setTextSize(2);

  if ((Zeit.tm_hour <= 5) || (Zeit.tm_hour >= 21)) {
    tft.setSwapBytes(true);
    tft.print("Schlaf weiter");
  }

  else {
    // Name des Wochentages 0-6
    switch (Zeit.tm_wday) {
      case 0:
        tft.setCursor(65, 20, 4);
        tft.fillScreen(TFT_BLACK);
        tft.print("Sonntag");
        break;

      case 1:
        tft.setCursor(65, 20, 4);
        tft.fillScreen(TFT_BLACK);
        tft.print("Montag");
        break;

      case 2:
        tft.setCursor(65, 20, 4);
        tft.fillScreen(TFT_BLACK);
        tft.print("Dienstag");
        break;

      case 3:
        tft.setCursor(65, 20, 4);
        tft.fillScreen(TFT_BLACK);
        tft.print("Mittwoch");
        break;

      case 4:
        tft.setCursor(55, 20, 4);
        tft.fillScreen(TFT_BLACK);
        tft.print("Donnerstag");
        break;

      case 5:
        tft.setCursor(65, 20, 4);
        tft.fillScreen(TFT_BLACK);
        tft.print("Freitag");
        break;

      case 6:
        tft.setCursor(65, 20, 4);
        tft.fillScreen(TFT_BLACK);
        tft.print("Samstag");
        break;
    }


    // Datum und Zeit
    tft.setCursor(75, 90, 2);

    // Tag
    if (Zeit.tm_mday < 10) tft.print("0");
    tft.print(Zeit.tm_mday);
    tft.print(".");


    // Monat
    if ((Zeit.tm_mon + 1) < 10) tft.print("0");
    tft.print(Zeit.tm_mon + 1);
    tft.print(".");

    // Jahr
    tft.print(Zeit.tm_year + 1900);
    tft.print(" ");




    // Stunde
    tft.setCursor(85, 140, 4);
    if (Zeit.tm_hour < 10)
      tft.print("0");
    tft.print(Zeit.tm_hour);
    tft.print(":");


    // Minute
    if (Zeit.tm_min < 10) tft.print("0");
    tft.print(Zeit.tm_min);


    //delay(5000);
  }
}

Der Bereich mit dem Touch wird noch weiter bearbeitet, der ist noch nicht fertig.
damit will ich später einen Pin auf high schalten um eine LED zu steuern.

Vielen Dank schon mal für eure Hilfe und einen guten Rutsch.

LG Mathias

Es gibt viele Lösungen um dein Problem zu beseitigen.
Aus meiner Sicht die einfachste ist, nicht ständig den Hintergrund neu mit schwarz zu beschreiben, sonder nur den Teil der Uhrzeit oder Text mit schwarz zu überschreiben und abschließend neu schreiben.

  1. Welchen Prozessor verwendest Du? Ich tippe auf ESP32-irgendwas.
  2. Welches Display verwendest Du? Welche Auflösung X*Y Pixel?

Schöne Idee, bis wann soll das fertig sein?

Ja, ein bekanntes Problem. Zwei Abhilfen:

  • Nur was auf des Display schreiben, wenn sich der Inhalt ändert.
  • Sprites von TFT_eSPI verwenden.

Ich würde beides machen, ist kein Hexenwerk :slightly_smiling_face:

Danke erstmal für die Tipps.

genau ein ESP32 Wroom.

Ich verwende ein ILI9341 mit 240*320 Pixeln

Ich hab kein festes Datum.
Wenn es fertig ist ist es fertig.
Muss wenn die Software steht auch noch ein Gehäuse drucken etc.
Wird also wohl noch eine Weile dauern.

Ich hab jetzt mal das fillscreen raus kommentiert. Solange die Uhrzeit angezeigt wird ist alles super. Nur das Schlaf weiter bleibt im Hintergrund. Die Zahlen überschreibnen sich schon von selbst.

Jetzt gilt es also rauszufinden, wie ich das einmalig überschreibe.
Sprites hab ich heute schon versucht zu verstehen, bin aber bislang grandios dran gescheitert.

Wenn man weiß und versteht was man da genau tut ist das wohl so :sweat_smile:

Lg Mathias

ungetestet.
kompiliert aber.
Ich musste den Touch pressed auskommentieren.
Edit: aufgeräumt und Rechtschreibkorrektur

#include "time.h"
//#include <SPI.h>
#include <TFT_eSPI.h>
#include <WiFiMulti.h>
#include "Arduino.h"

WiFiMulti wifiMulti;


TFT_eSPI tft = TFT_eSPI();  // Invoke library, pins defined in User_Setup.h

float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;  // Saved H, M, S x & y multipliers
float sdeg = 0, mdeg = 0, hdeg = 0;
uint32_t targetTime = 0;  // for next 1 second timeout

bool initial = 1;
static uint8_t conv2d(const char *p)
{
  uint8_t v = 0;
  if ('0' <= *p && *p <= '9')
  { v = *p - '0'; }
  return 10 * v + *++p - '0';
}


uint8_t hh = conv2d(__TIME__), mm = conv2d(__TIME__ + 3), ss = conv2d(__TIME__ + 6);  // Get H, M, S from compile time


// statischeIP = false -> IP-Adresse über DHCP vergeben
// statischeIP = true -> statische IP festlegen
// ip und gateway müssen an das lokale Netz angepasst werden
bool statischeIP = true;
IPAddress ip(192, 168, 0, 200);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

/*
  öffentliche DNS-Server
  -----------------------------------------------
  OpenDNS 208, 67, 222, 222 (USA)
  Google 8, 8, 8, 8 (USA)
  Cloudfare 1, 1, 1, 1 (USA)
  DNSWWatch 84, 200, 69, 80 (Deutschland)
  Quad9 9, 9, 9, 9 (Schweiz)
  Neustar UltraDNS 56, 154, 70, 3 (USA, gefiltert)
  Deutsche Telekom 217, 5,100,185
  ------------------------------------------------
  oder die im Router eingetragene IP
  im Beispiel: 192, 168, 1, 20
*/
IPAddress primaryDNS(217, 5, 100, 152);
IPAddress secondaryDNS(9, 9, 9, 9);

// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"

/*
  Liste der Zeitzonen
  https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
  Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
  CEST = Central European Summer Time von
  M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
  bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"

// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
byte lastMinute = 60;
/*
  Struktur tm
  tm_hour -> Stunde: 0 bis 23
  tm_min -> Minuten: 0 bis 59
  tm_sec -> Sekunden 0 bis 59
  tm_mday -> Tag 1 bis 31
  tm_wday -> Wochentag (0 = Sonntag, 6 = Samstag)
  tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
  tm_year -> Jahre seit 1900
  tm_yday -> vergangene Tage seit 1. Januar des Jahres
  tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
char weekday[7][11] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};

WiFiServer Server(80);
WiFiClient Client;



void setup()
{
  targetTime = millis() + 1000;
  // Zeitzone: Parameter für die zu ermittelnde Zeit
  configTzTime(Zeitzone, Zeitserver);
  Serial.begin(115200);
  tft.begin();
  {
    tft.init();
    tft.setRotation(-45);
    tft.setCursor(30, 8, 6);
    tft.fillScreen(TFT_BLACK);
    tft.setTextColor(TFT_GREEN, TFT_BLACK);  // Adding a black background colour erases previous text automatically
  }
  wifiMulti.addAP("ABC", "123");
  wifiMulti.addAP("DEF", "456");
  wifiMulti.addAP("GHI", "789");
  Serial.println("Connecting Wifi...");
  if (wifiMulti.run() == WL_CONNECTED)
  {
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}
void loop()
{
  uint16_t t_x = 0, t_y = 0;
  bool pressed = false; //tft.getTouch(&t_x, &t_y);
  if (pressed)
  {
    tft.fillScreen(TFT_BLACK);
    tft.print("Test");
    Serial.println("X= " + String(t_x) + " | Y= " + String(t_y));
  }
  time(&aktuelleZeit);
  // localtime_r -> Zeit in die lokale Zeitzone setzen
  localtime_r(&aktuelleZeit, &Zeit);
  // es kann bis zu 30 Sekunden dauern
  // bis die Zeit ermittelt wird
  if (lastMinute != Zeit.tm_min)
  {
    displayAusgabe();
    lastMinute = Zeit.tm_min;
  }
}

void displayAusgabe()
{
  tft.fillScreen(TFT_BLACK);
  tft.setTextSize(2);
  if ((Zeit.tm_hour <= 5) || (Zeit.tm_hour >= 21))
  {
    tft.setCursor(15, 20, 4);
    tft.setSwapBytes(true);
    tft.print("Schlaf weiter");
  }
  else
  {
    // Name des Wochentages 0-6
    tft.setCursor(65, 20, 4);
    tft.fillScreen(TFT_BLACK);
    tft.print(weekday[Zeit.tm_wday]);
    // Datum und Zeit
    tft.setCursor(75, 90, 2);
    // Tag
    if (Zeit.tm_mday < 10)
    {
      tft.print(0);
    }
    tft.print(Zeit.tm_mday);
    tft.print('.');
    // Monat
    if ((Zeit.tm_mon + 1) < 10)
    {
      tft.print(0);
    }
    tft.print(Zeit.tm_mon + 1);
    tft.print('.');
    // Jahr
    tft.print(Zeit.tm_year + 1900);
    tft.print(' ');
    // Stunde
    tft.setCursor(85, 140, 4);
    if (Zeit.tm_hour < 10)
    { tft.print(0); }
    tft.print(Zeit.tm_hour);
    tft.print(':');
    // Minute
    if (Zeit.tm_min < 10)
    {
      tft.print(0);
    }
    tft.print(Zeit.tm_min);
  }
}

Du verwendest den selben Text und Position mit der Farbe des Hintergrundes.

Das Thema gab es ja schon öfter. Evtl. helfen ja folgende Beiträge weiter:

Hier ist noch ein Beispiel auf das "Notwendige" gekürzt:

Da bekomme ich eine Meldung: Hat sich erledigt, ist inzwischen korrigiert.

Ja habe es geändert --- hatte die Variablen noch umbenannt aber nicht gespeichert. Sollte jetzt bei erneutem Aufruf funktionieren.

1 Like

Meins ist leider nur 128*160, also sind kleinere Schriften notwendig.

Ging mir auch so, daher gebe ich Dir mal einen Schubs.

Dein Programm finde ich etwas kompliziert für die Anwendung, daher starte ich mit dem Beispiel in NTP with Day Light Saving Time for the ESP32. Das habe ich um ArduinoOTA (ich bin faul), TFT und Sprites ergänzt. Es fehlt noch ein hübscher Font.

Programm als Anregung
/* Bitte die Hinweise auf der verlinkten Seite beachten!
  NTP TZ DST - bare minimum - NetWork Time Protocol - Time Zone - Daylight Saving Time
  by noiasca 2021-03-28 https://werner.rothschopf.net/microcontroller/202103_arduino_esp32_ntp_en.htm
*/

#include <zugangsdaten.h>                       // you could use a dedicated credentials file for your WIFI Password

//#define MY_NTP_SERVER "at.pool.ntp.org"         // choose the best fitting NTP server pool for your country
#define MY_NTP_SERVER "fritz.box"               // die Fritz!Box verzeiht Fehler wie zu häufige Abfragen
#define MY_TZ "CET-1CEST,M3.5.0/02,M10.5.0/03"  // choose your time zone from this list; https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv

#include <TFT_eSPI.h>
#include <WiFi.h>                               // we need wifi to get internet access
#include <time.h>                               // for time() ctime()
#include <ArduinoOTA.h>

TFT_eSPI tft = TFT_eSPI();                      // Display library, pins defined in User_Setup.h
TFT_eSprite sprite = TFT_eSprite(&tft);         // Sprite object
time_t now;                                     // this are the seconds since Epoch (1970) - UTC
tm tm;                                          // the structure tm holds time information in a more convenient way

int alt_sec = -1;

void showTime() {
  time(&now); // read the current time
  localtime_r(&now, &tm);             // update the structure tm with the current time
  if (alt_sec != tm.tm_sec) {
    alt_sec = tm.tm_sec;
    Serial.printf("%2d.%02d.%4d %2d:%02d:%02d", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min, tm.tm_sec);
    Serial.println();
    if (tm.tm_year > 100)  // "1970" wollen wir nicht anzeigen
    {
      //tft.fillScreen(TFT_BLACK);
      tft.setCursor(0, 30, 2);
      tft.printf("%2d.%02d.%4d", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900);
      //tft.setCursor(0, 50, 4);
      //tft.printf("%2d:%02d:%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
      sprite.setColorDepth(8);
      sprite.createSprite(100, 22);
      sprite.fillSprite(TFT_BLUE);  // damit man den Bereich erkennen kann, später TFT_BLACK
      sprite.setTextFont(4);
      sprite.setTextColor(TFT_WHITE);
      sprite.printf("%2d:%02d:%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
      sprite.pushSprite(0, 50);
      sprite.deleteSprite();
    }
  }
}

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("\nSuche Routerverbindung");
  tft.begin();
  tft.setRotation(3);
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_GREEN, TFT_BLACK);  // Adding a black background colour erases previous text automatically
  tft.println("Suche Routerverbindung");

  configTime(0, 0, MY_NTP_SERVER);  // 0, 0 because we will use TZ in the next line
  setenv("TZ", MY_TZ, 1);           // Set environment variable with your time zone
  tzset();

  WiFi.persistent(false);           // start network
  WiFi.mode(WIFI_STA);
  WiFi.begin(STA_SSID, STA_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(200);
    Serial.print ( "." );
  }
  Serial.println("\nWiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  tft.print("IP: ");
  tft.println(WiFi.localIP());
  ArduinoOTA.begin();
}

void loop() {
  ArduinoOTA.handle();
  showTime();
}
Anzeige

Nur eine Anregung, kein fertiges Programm!

Wird die Uhr von Deiner Freundin zu einem anderen Router bewegt, müssen SSID und Passwort geändert werden. Da hilft der WiFiManager, könntest Du eventuell einbinden.

Hallo agmue,
kannst du mir in kurzen Sätzen erklären, welche Vorteile Sprites bringen können.
Oder hast du evtl. ein bzw. zwei Fotos als Vergleich, mit und ohne Sprites ?
Aktuell habe ich keine Idee, was mir das bringt. :wink:

Aber gerne, nur kann ich bei den kurzen Sätzen keine Garantie geben, denn schon mein Deutschlehrer hat mir meine Bandwurmsätze angestrichen.

Es geht um eine möglichst flackerarme Anzeige, üblicherweise von sich schnell ändernden Daten. Wenn ein Text auf das Display geschrieben wird, dann muß der vorhergehende Text gelöscht werden. Das kann durch Überschreiben oder durch Löschen passieren.

Bei den Adafruit-Bibliotheken kann man einen Text schreiben, ihn mittels Rechteck löschen und neu beschreiben. Das nehmen wir als Flackern war, das es zu verhindern gilt.

Die Bibliothek TFT_eSPI hat die Möglichkeit, Vorder- und Hintergrundfarbe von Text festzulegen, wobei ein Text löschend überschrieben werden kann. Nach meiner Erfahrung funktioniert das sehr gut, solange die Größe und Länge des Textes ein sicheres Überschreiben gewährleistet. Stolpersteine sind proportionale Schriften und UTF-8 Zeichen wie Umlaute. Gäbe es keine Sprites, wäre dies die Lösung.

Von der Bibliothek U8g2 habe ich gelernt, eine komplette Anzeige zunächst im Speicher zusammenzustellen und dann mit einem Schlag auf das Display zu übertragen. Auch damit flackert es nicht. Bei größeren und farbigen Displays geht aber leider der Speicher schnell zur Neige.

Ein Sprite ist ein Speicherbereich, der einen Teil des Displays repräsentiert. Ein Sprite wird gestaltet und dann in einem Swupps auf das Display übertragen. Das braucht nicht so viel Speicher und es flackert dennoch nicht.

Soweit meine allgemeine Beschreibung.

Ich habe nicht behauptet, Sprites sind für dieses Thema unbedingt notwendig! Aber der TO zeigte sich interessiert, daher wollte ich nett sein und ihm ein Beispiel liefern. Bei einer Schrift mit Ziffern unterschiedlicher Breite könnten Sprites als definiertes Rechteck eine Vereinfachung zum sicheren Löschen des Hintergrundes liefern.

Helfen Dir meine sicherlich nicht erschöpfenden Ausführungen?

1 Like

Ja, absolut. Danke dafür.
Ich entnehme der Beschreibung, dass ich meine aktuell einfachen Bildschirm-Projekte mit einfachen Darstellungen wie Uhrzeit, Datum und Wetterdaten keine Anpassungen vornehmen. Mit den üblichen (ohne Sprites) Methoden der TFT-eSPI bekomme ich das bisher "flackerfrei" hin.

Wenn es komplizierter wird, werde ich mich sicher an die Sprites erinnern.
Also danke und einen erfolgreichen "Rutsch"

Super, vielen Dank für eure Hilfe.
Ihr seid echt spitze.

Das hat mich auf die Idee gebracht.

Ich hab es jetzt erstmal auf die (meiner Meinung nach) einfachste Art gelöst und
einfach den Text mit den Wochentagen mit Leerzeichen vergrößert. Damit uberschreibe ich einfach alles was ausgeblendet werden soll.

Super, das werde ich mir genau ansehen und versuchen es zu verstehen.
Läuft auf jeden Fall.

Das muss ich mir auch alles ansehen, Hilft mir auf jeden Fall weiter.

Ja sind verschiedene Netzwerke, daher hab ich WifiMulti eingebunden damit habn ich drei Netzwerke zur Auswahl. Funktioniert bisher Problemlos.

Lg Mathias

Hast du dir mal die [GitHub - Bodmer/User_Manual_TFT_eSPI: User Manual for TFT_eSPI](https://Doku zum TFT_eSPI) durchgelesen ?
Da steht so einiges drin, wie man einfachen Text "flackerfrei" bekommt.

Danke dir. Das ist sehr intressant.
Ich finde es echt super, das sich hier so viele Leute, so viel Mühe geben mir zu helfen. :+1:

Ich bin jetzt umgestiegen auf den Code von my_xy_projekt.
Und statt mit dem touch eine LED anzusteuern ( die ein Bild beleuchten sollte) hab ich mich entschieden das Bild direkt auf dem Display darzustellen.

Da arbeite ich allerdings noch dran. Im Beispielcode funktioniertr es korrekt, wenn ich es entsprechend in meinen Code übernehme wird das Bild eher wie ein Negativ dargestellt.
Denke das bekomme ich aber auch noch in den Griff.

Lg Mathias

Ist jetzt eventuell der falsche Zeitpunkt, aber den Text "Schlaf weiter" könnte ich mir in einer schönen Schreibschrift vorstellen. Das Processing-Script TFT_eSPI\Tools\Create_Smooth_Font\Create_font\Create_font.pde macht aus einem TrueType Font *.h oder *.vlw Dateien zur Verwendung mit TFT_eSPI. Für die Uhrzeit kann man sich nur Ziffern und den Doppelpunkt als Teilmenge übertragen. Es geht aber auch UTF-8 mit Umlauten oder Symbolen.

Wenn eine Bibliothek viel kann, ist es Fluch und Segen zugleich :slightly_smiling_face:

Manchmal sind es die kleinen einfachen Dinge :wink:

Das mit einer schöneren Schrift ist eine gute Idee.
werde ich mich mal dran versuchen.

Für dich sind es einfache Dinge.

Ich sitze jetzt schon seit Wochen immer wieder daran diesen Code zusammen zu bekommen.
Aber dafür lerne ich viel neues dadurch.

Lg Mathias

1 Like

wir haben alle mal angefangen.
darum habe ich deinen Code auch nicht sonderlich verändert.
Nur das beschreiben des Display in eine Funktion damit Du das mitt dem Minutentakt siehst.

Wenn Fragen sind, frag.

1 Like