Pages: [1]   Go Down
Author Topic: Grafisches Display, Text immer löschen?  (Read 375 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 135
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Cologne
Offline Offline
Sr. Member
****
Karma: 11
Posts: 496
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Morris,

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

Gruß
Reinhard
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 1
Posts: 135
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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:

Code:
#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);}
}
« Last Edit: April 23, 2013, 02:17:53 pm by maeckes » Logged

Pages: [1]   Go Up
Jump to: