Grafisches Display, Text immer löschen?

Hi!

Habe nun endlich mein grafisches i2C Display.

Ich möchte damit Uhrzeit, Datum und Temperaturen anzeigen.
Hintergrund schwarz, Schrift weiß.

Diese ändern sich ja nun zwangsläufig.
Problem:
Das Display schreibt die Uhrzeit und Ist-Temperatur.
Danach wird die aktualisierte Uhrzeit + Temperatur wieder geschrieben.
Dabei werden dann aber die neuen Daten über die alten geschrieben, so dass die Daten nicht mehr zu erkennen sind.

Habe nun eine Lösung gefunden: Die "alte" Uhrzeit + Temperatur in schwarz (Hintergrundfarbe) überschreiben, bevor man die neuen Daten in weiß schreibt.

Finde ich aber sehr unsauber.

Möglichkeit 2: schwarzen Balken über die jeweiligen Daten "malen". Ist aber auch eher unschön....

Flackern tut das Display jedoch bei beiden Möglichkeiten. Und das finde ich dabei am Schlimmsten.
Und "lcd.clear()" dauert zu lange....

Jemand ne schicke Lösung parat?

Gruß
Morris

Hallo Morris,

was passiert, wenn du die alten Daten mit Leerzeichen überschreibst oder meinst du das mit "in schwarz (Hintergrundfarbe) überschreiben" ?

Gruß
Reinhard

Welches Display hast Du, Welche Bibliothek verwendest Du? gibst Du uns einen Beispielsketch?
Grüße Uwe

erni-berni:
was passiert, wenn du die alten Daten mit Leerzeichen überschreibst oder meinst du das mit "in schwarz (Hintergrundfarbe) überschreiben" ?

bei Leerzeichen ist es so, als wenn ich gar nicht überschreiben würde. Auch ein String, der nur aus Leerzeichen besteht, wird quasi ignoriert.
Damit der Text wirklich nur an der Stelle gelöscht wird, habe ich einfach immer genau den gleichen Text noch mal in schwarz überschrieben, bevor ich den neuen geshrieben habe.
Beispiel: alte Temperatur 30°C, neue 31°C. Dann wird "30" statt in weiß, noch mal in schwarz an der gleichen Stelle geschrieben.
Nur geht das bei der Uhrzeit irgendwie nicht... Da musste ich nen schwarzen Balken merfach drüber zeichnen und dabei flackert die Anzeige.

uwefed:
Welches Display hast Du, Welche Bibliothek verwendest Du? gibst Du uns einen Beispielsketch?

Display:
http://web4robot.com/GraphicLCD.html 160x128
Bibliothek unten auf der Seite
Mein Sketch:

#include <Wire.h> 
#include <GLCDI2C.h>
#include <Time.h>   
#include <DS1307RTC.h>

//Farben definieren
#define	BLACK           0x0000
#define WHITE           0xFFFF

unsigned int maxX = 160;  // LCD x-resolution
unsigned int maxY = 128;  // LCD y-resolution
unsigned char i2cAddress = 0x46;  // LCD module I2C address
GLCDI2C lcd = GLCDI2C(maxX, maxY, i2cAddress);


void setup()
{  delay(500);
   Wire.begin(); 
   Serial.begin(9600);
   lcd.init();                //LCD initialisieren
   setSyncProvider(RTC.get);   //Uhrzeit vom RTC-Modul anfordern
}

void loop(){
clock();
}

//Hilfsfunktion um eine Null an Zahlen kleiner 10 anzuhängen (Beispiel: "12.8.2013" -> "12.08.2013")
void printDigits(int digits){
  lcd.fontType(FONT_SMALL);
  if(digits < 10)
  lcd.print('0');
  lcd.print(digits);
}

  
//Uhrenfunktion; Uhrzeit aus RTC anfordern und anzeigen  
void clock(){
  lcd.setColor(WHITE);
  lcd.fontType(FONT_SMALL);
  lcd.cursor(90,110);     //Cursor an Ziel setzen
  lcd.print(hour());
  lcd.print(":");
  printDigits(minute());
  lcd.print(":");
  printDigits(second());
  delay(1000);
  lcd.setColor(BLACK);
  for (int xx=110;xx<128;xx++){
  lcd.line(90,xx,160,xx);} 
}