LCD Display alte Werte Überschreiben mit Lerzeichen

Hallo zusammen,

ich habe ein LDC Display

Auf dem möchte ich mir werte eines Drehgebers ausgeben lassen, das klappt soweit auch schon.
ich habe jedoch ein Problem wenn ich die Werte neu schreiben lassen möchte das mir nicht alles Überscheiben wird.

Im Internet habe ich gelesen das man das einfach mit Leerzeichen machen soll.
Doch das hat bei mir bzw. bei dem LCD Display bewirkt das nichts.

Ich habe mir ein Test Code gemacht

// Display_Tool.ini

#include <Arduino.h>  // von Arduino System 
#include <U8g2lib.h>  // von Oliver          => für Display
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // Display Installiren
/*  VDD => 5V+ (Arduino)
 *  GND => GND (Arduino)
 *  SCK => Pin 20 (Arduino Mega) 
 *  SAD => Pin 21 (Arduino Mega)
 */
// 
char buffer [10];

void setup() {
   u8g2.begin();             // Display Starten
   Wallpaper();              // Wallpaper aufrufen
} // SETUP

void loop() {
  int Pause = 250; 
  
  Display_Aktuallisiren(70, 25, "1234567890");
  delay(Pause); 
  
  long TMP = 100;
  Display_Aktuallisiren(70, 25, itoa(TMP, buffer, 10));
  delay(Pause);   

  Display_Aktuallisiren(70, 25, "   -5");
  delay(Pause); 

  Display_Aktuallisiren(70, 25, "Muster");
  delay(Pause); 
} // LOOP

void Wallpaper(){
/* Buffer CLS     */ u8g2.clearBuffer(); // Lösche den Puffer
/* Display CLS    */ u8g2.clearDisplay(); // Lösche die Anzeige auf dem Bildschirm
/* Schriftart     */ u8g2.setFont(u8g2_font_ncenB08_tr);   // eine geeignete Schriftart wählen
/* Ueberschrift   */ u8g2.drawStr(0, 10, "Schrittmotoren Tool");
/* Schriftart     */ u8g2.setFont(u8g2_font_5x7_tf);
/* Text           */ u8g2.drawStr(20, 25, "Schritte:");
/* Text           */ u8g2.drawStr(35, 35, "Speed:        ms");
/* Text           */ u8g2.drawStr(00, 45, "Drehrichtung:"); 
/* Text           */ u8g2.drawStr(25, 55, "Treiber:"); 
/* Ausgabe        */ u8g2.sendBuffer();  
} // WALLPAPER

void Display_Aktuallisiren(int x_koordinate, int y_koordinate, const char Wert[10]){
/* 
 *  Was            X, Y
 *  Schritte       70, 25
 *  Speed          70, 35
 *  Drehrichtung   70, 45
 *  Treiber        70, 55
 */
/* Schriftart     */ u8g2.setFont(u8g2_font_5x7_tf);
/* CLS            */ u8g2.drawStr(x_koordinate, y_koordinate, "          " );       
/* Wert ausgabe   */ u8g2.drawStr(x_koordinate, y_koordinate, Wert );       
/* Ausgabe        */ u8g2.sendBuffer(); 
} // DISPLAY_AKTUALLISIREN

leider klappt das mit dem zuerst Löschen und dann den Neuen Wert rein schreiben nicht. :frowning:
Also ich meine die Zeile hier:
/* CLS */ u8g2.drawStr(x_koordinate, y_koordinate, " " );

Was habe ich da nicht verstanden?

Gruß Mücke

[EDIT]

Das hängt davon ab, wie deine Lib für die Zeichenausgabe funktioniert. Es gibt Libs bzw. Methoden der Libs, die arbeiten wie ein Drucker. D.h. es wird nur die Vordergrundfarbe ( also das eigentliche Zeichen ) geschrieben. Da ist z.B. auch 'Überdrucken' möglich. Bei manchen kann man das aber einstellen, ob auch die Hintergrundfarbe geschrieben werden soll. Das muss man in der Lib genau nachschauen. Ich kenne allerdings die U8g2lib nicht.

Ah OK, dann muss ich mich da mal auf die Suche machen. ob das mit der LIB geht. Danke für den Hinweis.

Du musst einen anderen Font (nicht einen transparenten Font) benutzen.

Gruß Tommy

Gegebenenfalls kann man auch das Ausgabefeld vor dem 'drucken' mit einem Rechteck in HIntergrundfarbe 'übermalen'. So habe ich das auch schon öfters gemacht.

Das hatte ich mir auch überlegt, doch ich glaube nicht das das die Schönste Lösung ist.

Geht in der Regel aber schneller als die anderen Varianten. Ein 'transparenter' Font wird schneller geschrieben als mit Hintergrundfarbe, da deutlich weniger Pixel zu schreiben sind. Und ein Rechteck geht in aller Regel auch recht flott.

Danke das war es.

ich habe in Benutzung:
/* Schriftart */ u8g2.setFont(u8g2_font_5x7_tf);
Das t am Schluss steht für transparent.

Jetzt habe ich:
/* Schriftart */ u8g2.setFont(u8g2_font_5x7_mf);
das t mit einem m ersetzt, und es klapt.

DANKE !!

Es sieht sehr schlecht aus weil es zwangsläufig flackert

Hmm, das ist natürlich ein Argument.

Wobei meine Erfahrungen auf Displays mit einem ILI9341 basieren...

Hängt allerdings stark von der Anwendung ab. Bei z.B. einer Zahl, die hochzählt - also viele Zeichen gleich bleiben - ist das sicher so, da stimme ich dir zu. Bei einem Menütext, wo sich alles ändert, sieht das wieder anders aus.

Bei mir Handel es sich um 4 Werte, jeder Wert hat 10 Stellen.
Der Rest auf dem Display bleibt gleich.

Dazu wird auch immer nur ein Wert Aktualisiert.
habe das jetzt gerade getestet, mit zwei Drehgebern die eingelesen werden und der Wert wir Aktualisiert.
Wobei ich nur die Leerzeichen (10 Stück) mit Hintergrund schreibe alles andere mache ich dann wieder mit Transparenten Hintergrund.

Das klappt sehr gut, finde ich.
DANKE.

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