Hallo zusammen,
nachdem schon andere User eine Möglichkeit zum Dunkel schalten eines OLED-Displays gesucht haben, stelle ich euch meine Lösung vor. Bekanntermaßen brennt ein OLED-Display mit der Zeit ein, wenn es immer eingeschaltet ist. Der Stromverbrauch ist dabei keine Thema, sondern eher die Lebensdauer des Displays. In meinem Beispiel-Sketch kann man zur Demo das Display mit einer Taste einfach dunkel schalten. Ein Invertieren des Vorganges ist natürlich auch möglich. Im praktischen Einsatz bieten sich Monoflop, FlipFlop o. ä. an. Bei meinem Projekt (geht am Wochenende endlich in Betrieb) ist das Display standardmäßig dunkel und wird durch eine Taste für 5 Minuten eingeschaltet. Diese Zeit reicht mir zum Ablesen der Messwerte. Das Script ist einfach gestrickt und kann sicher verbessert werden. Für Anfänger (wie mich) ist es so besser zu durchschauen. Vielleicht hat jemand Verwendung dafür.
Da Du bei realen veränderlichen Daten sowieso nach dem hell schalten alles neu und aktuell schreiben musst, dürfte ein clear() zum Dunkelschalten doch ausreichen.
Nicht vergessen das die Befehle nur den von der Lib gebildeten Anzeigenspeicher bedienen. Erst das... display.display(); überträgt den Inhalt (in dem Fall ein dunkles Display) an das eigentliche Display.
mir fällt da aber noch was auf. Dein Skript schaltet ja nicht dunkel sondern auf invertierten Text. was man mit display.invertDisplay(true);und display.invertDisplay(false); erreichen kann ohne den Anzeigenspeicher löschen zu müssen.
Wenn du die aktuelle Lib nutzt, lauten die Befehle für normalen und invertierten Text auch anders...
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
Mit der Bibliothek habe ich mich nicht näher befasst, aber jedenfalls wird der Bildschirm richtig schwarz, also dunkel. Spricht etwas gegen meine Lösung?
in der aktuellen Version.
Ich babe die Vermutung, das wenn jemand eine ältere Version der Lib benutzt mit deinem Skript der Text tatsächlich invertiert ausgegeben wird und kein dunkles Display.
Das kann ich dir nicht genau sagen, wann diese Umstellung passiert ist. Mit ist es nur vor ein paar Tagen selber auf die Füße gefallen. Hatte vor 2-3 Jahren was mit dieser Lib gemacht und da war es deine Schreibweise. Jetzt hatte ich mal wieder ein Projekt für die Displays (hatte noch welche rumliegen) und es paßte so einiges nicht mehr nachdem die Lib aktualisiert wurde. Hatte die tollsten Effekte auf dem Display mit meinen alten Skripten und mußte mir vieles wieder neu erarbeiten. Dadurch ist mir das nur aufgefallen.
Ergo brauche ich auch nichts zu ändern. Ich benutze für meine Tests ein OLED-Display 0,96 Inch von AZDelivery. Wer die Möglichkeit hat, kann das gerne nachvollziehen.
Dein Vorschlag hat mich irritiert. Die zweite Zeile muss wie folgt lauten:
display.setTextColor(SSD1306_BLACK);
Dann klappt es auch mit neueren Versionen der Lib.
Ich habe nun weitere Tests durchgeführt. Alte Versionen bis mindestens 1.2.5 bringen unabhängig von meinem Code sofort Fehler der Lib. Ab Version 2.0.0 läuft es mit meinem Code einwandfrei. M. E. wird kein User uralte Versionen der Lib benutzen. Daher kann ich den Sketch so belassen.
Hui, das wundert mich gerade, weil ich den Quelltext so direkt aus der originalen Beispieldatei genommen hatte. Sei es drum, wer sagt denn das die da nicht auch mal einen Fehler machen.
Obwohl...
Nur mal angenommen du würdest etwas machen wie eine Zeile überschreiben mit...
... würde vermutlich nur negativ Welt! da stehen weil ein expliziter Hintergrund angegeben ist.
Bliebe mal zu testen, habe ich aber gerade keine Zeit für. Vom logischen her würde es Sinn machen den zweiten Wert an zu geben, wenn man etwas überschreiben will.
Aber gut, das hat mit deinem Sketch nix zu tun und ich danke dir für deine Mühe und die Info das dies so funktioniert.
Nein, da mißverstehst du mich. Es sollte mutwillig die selbe Position sein, damit er die beiden Texte aufeinander geblendet an der selben Position anzeigt, oder eben nicht mit angegebenen Hintergrund.
So was kann man gut brauchen, wenn man in einer Anzeige nur einen Meßwert aktualisieren will, ohne den alten Meßwert vorher weg nehmen zu müssen.