Arduino: OLED I²C 128×64 MONOCHROME LIBRARY

Display_Real_Image

Du hast so einen Display rumliegen, aber nichts mit dem du ihn nutzen kannst?

Dann hab‘ ich was für dich: Eine effiziente Lib mit kleinem Footprint im Speicher des Arduinos.

Die Einbindung ist so leicht wie die jeder anderen Lib, und Beispiele gibt’s auch noch. Auf was wartest du? Los geht’s!

Advertisements

24 Gedanken zu “Arduino: OLED I²C 128×64 MONOCHROME LIBRARY

  1. Klasse, danke! Bin auf der Suche nach einer schlankeren Alternative zur Adafruit-SSD1306-Library hier fündig geworden – ich baue gerade eine neue Version eines kleinen Midi-Controllers mit einem Teensy.

    Da mich die Sache mit dem kleinen Zeichensatz auch gewurmt hat, habe ich eine alte Bitmap-Vergrößerungs-Routine reingebastelt – scale2x und scale3x. Das Ergebnis gibt’s hier zu sehen – https://www.youtube.com/watch?v=K8MOZVIM1YU (dort ist auch ein Link zu einem Github-Repository; wäre ich Github-erfahrener, hätte ich dir den Code als Ergänzung angeboten.)

    Danke jedenfalls!

    Gefällt mir

  2. Es ist schon mehr als verwirrend, dass die Beispiele scheinbar Strings übergeben, aber mit diesen kann man nicht arbeiten.
    Welcher Datentyp für TEXTE ist erforderlich ?

    Gefällt mir

    1. Dazu muss ich kurz fragen, was du genau mit Texten meinst?
      Vom Datentyp her ist’s ein Char-Array. Wenn du auf das Problem anspielst, dass du zB vom seriellen Monitor direkt keine Textausgabe realisieren kannst, dann liegt’s daran, dass du vorerst den String in ein Char-Array wandeln musst, das du dann weiter parsen kannst.

      Im *.cpp File ( https://github.com/deloarts/OLED_I2C_128x64_Monochrome_Library/blob/master/OLED_I2C_128x64_Monochrome.cpp#L78 ) kannst du dirs genauer ansehen.

      Gefällt mir

  3. Hallo, wie kann man denn die Schrift anpassen, dass sie größer wird. Ich nehme an ich muss in der OLED_I2C_128x64_Monochrome_Font.h die Änderungen vornehmen, weiß aber leider nicht was eich eintragen muss. Kannst du mir da einen Tipp geben?

    Gruß Bert

    Gefällt mir

    1. Du hast es schon richtig erkannt, die Schrift ist im …_Font.h hinterlegt. Dort ist eine Zeile jeweils ein ASCII-Symbol, beginnend von DEC32, endend bei DEC127 (die Tabelle findest du hier: http://www.asciitable.com/ , hier siehst du auch gleich, welche Symbole überhaupt darstellbar sind).

      Die Schriftgröße nimmt derzeit 8×8 Pixel ein, das erkennst du am Aufbau der Zeilen in der …_Font.h. Willst du also ein Zeichen darstellen, so wird der korrespondierende ASCII-Eintrag genommen und Schrittweise auf dem Display dargstellt. Die Vorgehensweise findest du im *.cpp-File in der Funktion Display::printChar().

      Der Grund warum die Schriftart genau 8 Pixel hoch ist, ist dass der Display von sich aus in Zeilen der Höhe 8 Pixel arbeitet. Ich habe mir also einiges an Aufwand erspart die Schrift zu erstellen, weil man ansonsten zum darstellen eines Zeichens mehrfach Zeilen wechseln müsste.

      Wenn du die Größe der Schrift also ändern willst, dann kannst du das wie folgt tun:

      Erstelle zuerst eine neue Font (ASCII-Reihenfolge beachten) und lade sie in die …_Font.h. Wie du einzelne Pixel am Display darstellst habe ich im Eintrag beschrieben. Dabei kannst du grundsätzlich jede Größe wählen (10×10, 12×14, etc).

      Danach musst die *.cpp bearbeiten, am besten du fängst bei Display::setCursor() and und arbeitest dich weiter nach vorne. Allerdings musst du auf das pageAdressing achten (wie sich der Display am Zeilenende verhält).

      Ich denke du hast dir einen etwas einfacheren Weg erhofft, aber leider ist das Ändern der Schriftgröße ein Haufen Arbeit, ich hoffe trotzdem ich habe dir helfen können, wenn du noch Fragen hast, dann helfe ich dir gerne weiter.

      MFG

      Gefällt mir

      1. Hey, danke für die schnelle Antwort!
        Ok, dann muss ich mich mal in Ruhe damit auseinander setzen. Ich würde mich in Arduino Dingen, in der Mittelkasse einordnen. Ich muss eigentlich lediglich eine Zweistellige Zahl, möglichst groß Darstellen.
        Im Notfall schiele ich mal in die Adafruit Library und schau mal wie die das gemacht haben. Bei denen ist halt mein Problem, dass da der Arduino gleich voll ist (Ram) und ich dann für meinen Code kaum Platz habe. Da sieht das mit deiner Library um Welten besser auch 😀

        Gruß Bert

        Gefällt mir

        1. Wenn es nur um Zahlen geht, dann kannst du diese auch als NxM größes Bitmap erstellen (suche nach Bitmap to Hex Converter). Und dann wirfst du die Zahl einfach per drawBitmap-Funktion an die richtige Stelle. Wenn es um keine schnellen Wechsel der Zahlen geht, dann sollte das sehr gut funktionieren, ohne viel RAM zu verbrauchen.

          Gefällt mir

    1. Hier kommt es darauf an, von welchem Hersteller dein Display ist.
      Wenn du eines von Heltec hast, dann muss man schon recht konkret suchen, da diese Displays weder eine Seriennummer, noch eine Typennummer oder Ähnliches haben, dafür gibt es unterschiedliche Ausführungen (4 Pins, 6 Pins, mit/ohne Spannungsregler, 3.3V, 5V …).

      Für den Chip habe ich dir das Datenblatt unter folgenden Link bereitgestellt: http://www.deloarts.bplaced.net/sites/de/libraries/oled_display/datasheet_SSD1780.pdf

      Und für das OLED-Panel hier (das ist nicht ganz so interessant):
      http://www.deloarts.bplaced.net/sites/de/libraries/oled_display/datasheet_panel.pdf

      Ich hoffe du hast den selben Chip wie ich, dann kannst du das Datenblatt nutzen – aber wenn meine lib funktioniert, dann sollte dem so sein.

      Gefällt mir

  4. Vielen Dank!

    Du hast mit dieser kurzen Beschreibung und der Bib mehr für mich getan als diese ganzen „Tutorials“ die am Ende eh nicht funktionieren!

    +1 Internets for you

    Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

w

Verbinde mit %s