Forum: Mikrocontroller und Digitale Elektronik Commands OLED SPI / I2C 0.96 SSD1306


von r_u_d_i (Gast)


Lesenswert?

Hi

Ich vermisse - oder hab ihn noch nicht gesehen - den Command Instruct 
für eine Zeile zu löschen:

ALso:
Ich schreibe
1
display.setCursor(0,0);
2
println("Hallo Welt!");
3
println("Wie geht es?")
4
display.display();

Ausgabe:
Hallo World!
Wie geht es?


Jetzt will ich die erste Zeile überscchreiben:
1
display.setCursor(0,0);
2
println("Hello  World!");
3
display.display();

der alte Text steht noch da
der neue wird drüber geschrieben, alles "verlaufen"

ich will keinen
1
display.clear();

aufrufen, eher die Zeile clearen.
lauter leerzeichen zuvor zu schreiben bringt nichts
da er nur die pixel für den Platz den das leerzeichen braucht
ausfüllt ( wird dann schwarz ) aber nicht den rest.

Gibt es den Befehl nicht für  das SSD1306 oder hab ich was übersehen.
Die Command constructs oben sind eher pseudo zum bessern erklären.

lg rudi ;-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ist das Ding nicht ein Vollgraphikdisplay, das gar nicht weiß, was 
"Text" ist, und der Text wird von irgendeiner von Dir nicht 
spezifizierten Library ausgegeben?

von Stefan S. (sschultewolter)


Lesenswert?

Grafisches Display. Das kennt wie rufus angemerkt hat, keine Zeilen. 
Lösche in dem du die "Zeile" mit einem Leerzeichen überschreibst. 
Wichtig dabei, die Hintergrundfarbe schwarz mit einzustellen.

von Ronny S. (phoenix-0815)


Lesenswert?

r_u_d_i schrieb:
> ich will keinendisplay.clear();

Okay dann Schreibe Dir eine Funktion im Grafik Mode.
Die Du dann fürs löschen nutzt, nicht schön macht aber das was hier 
gewünscht ist.

8x8 Font z.b. also 8 Linien pro Zeile. Farbe schwarz nicht vergessen.

Zeile neu schreiben, viel Spaß.

Gruß Ronny

Ansonsten suche mal nach u8glib !

von r_u_d_i (Gast)


Lesenswert?

@rufus, stefan, ronny

die beigelegte lib von adafruit kennt "zeile" löschen nicht.
wundert mich  - ok - frage ist beantwortet so weit - werde eine funktion 
ergänzen. vielen dank an euch!!

u8glib schauhe ich mal nach

lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

Ok gelöst:
1
display.setCursor(0,0)
2
display.setTextColor(WHITE);
3
display.println("Hello World!");
4
display.display();
5
delay(1000);
6
7
display.setCursor(0,0) // (spalte/zeile)
8
// display.setTextColor(WHITE);
9
display.setTextColor(WHITE,BLACK);// danke stefan! 2te parameter 'schwarz' 
10
display.println("Hallo Welt!");
11
display.display();
12
delay(1000);

danke!

lg rudi ;-)

von JojoS (Gast)


Lesenswert?

Dieses Vorgehen kostet aber auch nicht weniger als das clear zu Beginn. 
Der Inhalt wird im Buffer aufgebaut und mit dispay() in die Anzeige 
gejagt, dadurch flackert nichts falls das die Bedenken waren.
Und wenn löschen dann ist ein schwarzes Rechteck zu zeichnen schneller, 
die Zeichenausgabe ist wesentlich aufwändiger.

von JojoS (Gast)


Lesenswert?

Ok, habe die zweite Println() falsch interpretiert. Die muss nur immer 
min so lang wie die erste Ausgabe sein sonst bleiben ja Reste übrig

von r_u_d_i (Gast)


Lesenswert?

JojoS schrieb:
> Dieses Vorgehen kostet aber auch nicht weniger als das clear zu Beginn.

Ne da hast Recht,
aber ich hab nicht alles geschrieben:
wenn ich dann vier Zeilen habe
und möchte nur Werte in der ersten Zeile updaten
dann ist ein clear da ungünstig da ich den ganzen inhalt wieder 
schreiben muss.

> Der Inhalt wird im Buffer aufgebaut und mit dispay() in die Anzeige
> gejagt, dadurch flackert nichts falls das die Bedenken waren.

genau das wars. hier flackert es - es baut sich sichtbar nicht so 
schnell auf sodass das flankern nicht auffallen würde.

> Und wenn löschen dann ist ein schwarzes Rechteck zu zeichnen schneller,
> die Zeichenausgabe ist wesentlich aufwändiger.

mit der Angabe wo der Cursor steht, dachte ich, wäre es leichter, mit 
Text zu arbeiten, ein rechteck müsste ich die koordinaten erst wieder 
errechnen sodass bei gesetzter texthöhe auch alles dahinter 
verschwindet.

aber ich werde das rechteck mal probieren, danke!!

lg rudi

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du könntest die Textausgabefunktion so modifizieren, daß sie Dir die 
Koordinaten des jeweils beschriebenen Rechtecks zurückliefert. Die 
könntest Du für etwaige nachfolgende Löschaktionen aufheben, um dann 
wirklich nur ein Rechteck auszugeben (was schneller sein dürfte als den 
Text nochmal invertiert auszugeben).

von r_u_d_i (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> ..daß sie Dir die  Koordinaten...

Perfect!
Danke!!
lg rudi ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.