Font für 0,96" Display und u8g2 lib

Hallo,
ich spiele gerade mal wieder mit der u8g2 lib rum und möchte die mit einem 0,96" OLED Display verwenden. Habe bisher die Adafruit_SSD1306.h verwendet. Was mir bei der u8g2Lib gut gefällt ist das man Werte einfach aktualisieren kann ohne die Position vorher zu "löschen" und das Display nicht flackert dabei. Habe schon verschieden Fonts probiert, allerdings lassen sich bisher alle nur schlecht lesen. möchte gerne 4-5 Zeilen darstellen. Hat jemand einen Tip was gut lesbar ist mit dem mini Display.

Heinz

Ich verwende gerade u8g2_font_6x12_tr.

Mein Tab für die Anzeige wie beim seriellen Monitor:

#if defined(DEBUG) && (DEBUG == OLED)
#include <Wire.h>
#include <U8g2lib.h>

//U8G2_SSD1306_128X64_NONAME_F_HW_I2C oled(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
U8G2_SH1106_128X64_NONAME_F_HW_I2C oled(U8G2_R0);
#endif

void setup_OLED() {
#if defined(DEBUG) && (DEBUG == OLED)
  oled.begin();
#endif
}

void anzeigeOLED(const char * text) {
#if defined(DEBUG) && (DEBUG == OLED)
  const byte ZEILEMAX = 8;
  const byte SPALTEMAX = 22;
  static char buf[ZEILEMAX][SPALTEMAX] = {" ", " ", " ", " ", " ", " ", " ", " "};
  oled.clearBuffer();              // clear the internal memory
  oled.setFont(u8g2_font_6x12_tr); // choose a suitable font
  for (byte zeile = 0; zeile < ZEILEMAX; zeile++) {
    oled.setCursor(0, ((zeile + 1) * 8) - 1);
    for (byte spalte = 0; spalte < (SPALTEMAX - 1); spalte++) {
      if (zeile < (ZEILEMAX - 1)) {
        buf[zeile][spalte] = buf[zeile + 1][spalte];
        if (buf[zeile][spalte] == '\0') {
          break;
        }
      } else {
        buf[zeile][spalte] = text[spalte];
        buf[zeile][spalte + 1] = '\0';
        if (buf[zeile][spalte] == '\0') {
          break;
        }
      }
      oled.print(buf[zeile][spalte]);
    }
  }
  oled.sendBuffer();          // transfer internal memory to the display
#endif
}

Das finde ich schon sehr ambitioniert.
Ich nutze zwar auf einem ESP8266 diese Library, aber du kannst sie ja mal bei dir testen. Da werden mit neuen Texten auch nur einfach die alten überschrieben.

Ich habe die allerdings bisher nicht auf einem Arduino getestet.

Hallo,

Sorry Nachtrag Display 128x64 pixel
und das kannst Du auf dem 0,96" Display lesen ??. Sorry ich erkenne da fast nix
Gruß Heinz

Mit Brille ja :nerd_face:

grafik

Da ist noch eine Folie drauf, daher etwas verschwommen.

Die acht Zeilen sollen informativ sein, schon etwas gequetscht, die Unterlängen werden überschrieben.

Hallo,
ich denke es liegt an meinem Display SSD1306 , wenn ich den Font 6x12_tr nutze ist z.B ein B nur 3 pixel hoch , damit geht natürlich nix. Den DigitalDisco_tf habe ich gerade probiert ist ein Kompromiss :thinking:
danke
Gruß Heinz


#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

//U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
int i;
void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();					// clear the internal memory
  //u8g2.setFont(u8g2_font_9x15B_tf);
  //u8g2.setFont(u8g2_font_DigitalDisco_tf);	// choose a suitable font
  u8g2.setFont(u8g2_font_6x12_tr);
  u8g2.drawStr(0,16,"geht BCD");	// write something to the internal memory
  u8g2.setCursor(0,32);u8g2.print(i);
  u8g2.setCursor(0,48);u8g2.print(millis());u8g2.print(" ms");
  u8g2.setCursor(0,64);u8g2.print("Zeile 4");
  i++;
  u8g2.sendBuffer();					// transfer internal memory to the display
  delay(1000);  
  
}

Sieht bei mir leserlicher aus:

grafik

Ich vermute dein Display ist defekt.
Es sieht so aus, als ob unten rechts das Glas gebrochen ist.
Diesen Fehler hatte ich auch schon an diversen Oleds.

In der Bibliothek finde ich:

U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
1 Like

Und man kann es tatsächlich auf die Spitze treiben. :wink:

Tatsächlich sieht es sauber mit 6 Zeilen aus.

Hallo,

irgendwas stimmt nicht mit dem Display

ich hab jetzt
U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
verwendet und bekomme damit 4 Zeilen gut lesbar drauf

u8g2.setFont(u8g2_font_6x12_tr);
 u8g2.drawStr(0,8,"geht BCD");  // write something to the internal memory
 u8g2.setCursor(0,16);u8g2.print(i);
 u8g2.setCursor(0,24);u8g2.print(millis());u8g2.print(" ms");
 u8g2.setCursor(0,32);u8g2.print("Zeile 4");

Damit würde ich sagen es ist ein Display mit 64x32 :innocent: aber das stimmt ja auch nicht. ist jetzt vergleichbar mit der Adafruit_SSD1306.h und display.setTextSize(2);

egal so geht das was ich vorhatte ,werde mal ein neues bestellen nochmals Danke

Stimmt ist gebrochen
Gruß Heinz

Dann ist es etwas für die "runde Tonne" :wink:
Ich kenne das, habe 2 so per Post bekommen und reklamiert. Leider nur einmal Ersatz.
Aber egal, da waren die noch sehr preiswert aus der Bucht.

Eventuell auf 1,3" OLED Display | 128 x 64 | SH1106 | I2C/IIC umsteigen, ist schon etwas größer, macht schon was aus.

Danke das hatte ich auch vor.
Heinz