Verständnis-Probleme beim anzeigen von Graphen und Text im GLCD

Hallo Leute,

ich habe mir lange darüber den Kopf zerbrochen ... Da ich nun nicht mehr weiter weis (und die Suche beim großen G nicht wirklich etwas gebracht hat), musste ich mich doch mal in eurem tollen Forum anmelden :sweat_smile:

Also, mein "Verständnis-Problem" bezieht sich darauf, dass ich auf einem GLCD (in meinem Fall SSD1306 128x64) einen Graphen über den Spannungsverlauf von "A0" aufzeigen will.
Soweit ist das kein Problem und auch alles schon erledigt.

Ablauf: Hintergund mit Skalenstrichen im Setup laden -> A0 einlesen und per "drawline" anzeigen
(Sobald das ende vom Display erreicht ist, das gane wieder von vorne)

Nun hätte ich natürlich gerne, dass auch der aktuelle Wert als Schrift am oberen Rand steht. Auch das stellt noch kein Problem dar. Aber sobaldd sich der Wert ändert, werden die vorherigen Zahlen nicht gelöscht, sondern überschrieben. So ist dann gar nichts mehr zu lesen.

So, jetzt das "Verständnis-Problem" :
Abhilfe 1: Zeile löschen. Geht bei dem display nicht auf Anhieb,
Abhilfe 2: Display komlett löschen. Geht sehr einfach, löscht aber meinen ganzen Graphen mit :confused:

Nun habe ich mir schon einige Projekte mit diesem Display angeguckt, aber das Prinzip von der Aktuallisierung der ablesbaren Werte nicht in meinen Kopf bekommen.

Gibt es eine ganz andere Lösung oder bin ich in mein Noob-Zustand zurück gefallen?

schonmal schöne Grüße aus der Eifel
Eric

Wenn Du einzelne Pixel / Linien zeichnen kannst, geht das so: einfach VOR der Ausgabe des Zahlenwertes das betreffende Rechteck auf dem Display löschen - also mit Farbe 0 überschreiben.

Gruß,

Helmuth

Hallo Helmuth und danke für deine schnelle Antwort,

dein Vorschlag wäre dann quasi so:

display.fillRect(100, 0, 120, 10, BLACK);
display.display();

habe das direkt mal eingafügt und siehe da ... klappt einwandfrei :astonished:

nocheinmal großes Dankeschön :smiley:

Wird das immer so gemacht oder gibt es einen "Standartweg" für sowas?

Ich nehme an, dass es reicht,

display.display();

nur einmal innerhalb des Loops zu verwenden - nachdem Du alle Daten in den Bildspeicher geschrieben hast.

Zuerst veränderst Du den Bildspeicher, danach schiebst Du ihn komplett in das GLCD.

Wird das immer so gemacht oder gibt es einen "Standartweg" für sowas?

Keine Ahnung, möglicherweise bieten Dir Deine Lib oder Deine C Kenntnisse auch andere Möglichkeiten, definierte Speicherbereiche mit einem Zahlenwert zu füllen...

Aber grundsätzlich ist das Konzept bei bewegten Bildinhalten immer das Gleiche: Alles was sich ändern kann wird zuerst "gelöscht" und danach neu geschrieben.
Statische Inhalte bleiben unberührt (falls es nicht schneller geht, mit z.B. memset alles zu löschen und dann alles neu zu zeichnen).

Das Einfachste ist sich die Zeichen auf asgegebenen Positionen zu merken und vor dem Neuschreiben
mit Farbe 0 nochmal schreiben. (Bei Monochromdisplays).
Ansonsten, auch wenn der Hintergrund erhalten bleiben soll (falls er farbig ist oder Grafike enthält) das
zu löschende Zeichen nochmal, wenn die Lib das hergibt, mit XOR (Exclusive Oder) auf die selbe
Position malen.

Ulli

Eine Schrift neuzeichnen ist aber rechenaufwendiger als ein kleines Rechteck zu füllen.

Es gibt sicher noch ein paar Alternativen so etwas zu machen (Offscreen-Buffer mit den Bildkomponenten z.B.), aber für einen Arduino mit seiner doch sehr begrenzter Rechen- und Speicherkapazität dürfte dass schon so eine sinnvolle Variante sein.