Moin,
ich muss beim U8g2 auf die Page Buffer-Funktion zurückgreifen, weil mir sonst der RAM ausgeht.
Die Funktion ausm Beispiel sieht ja so aus:
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(0,24,"Hello World!");
} while ( u8g2.nextPage() );
Nun möchte ich, um das übersichtlicher zu halten, das in eine Funktion packen.
So sieht das bei mir aus:
void Oled(U8G2_SSD1306_128X64_NONAME_1_HW_I2C display, const char* s) {
display.firstPage();
do {
display.setFont(u8g2_font_ncenB10_tr);
display.drawStr(10, 20, s);
} while ( display.nextPage() );
}
Es wird das Display übergeben, welches angesteuert werden soll und der darzustellende String. Mit etwas Googelei, da ich nicht direkt ein String definieren kann, hab ich es geschafft das mit diesem Char-Pointer zu lösen.
Rufe ich die Funktion mit String auf:
Oled(OledL, "Low"); // OledL ist das Display
funktioniert es.
Möchte ich allerdings einen String zusammen bauen, wie es vorher mit "print" ging, scheint es ein Pointer-Problem zu geben, weil das Display mir dann plötzlich abgehackt alle möglichen Strings aus dem Programm anzeigt.
Der Code
volatile unsigned int TempLinks; //linke Temperatur, wird in einem Interrupt eingelesen
Oled(OledL, int(TempLinks)/10+10 + "." + int(TempLinks)%10); //zerlegen, Offset plus Nachkommawert (aus 135 wird 23,5)
Dann zeigt das Display Strings aus diversen Serial.println an, abgehackt.
Hat jemand ein Tipp, wie ich das sinnvoll und richtig hinbekomme, bevor ich mich weiter verrenne? Hab grad echt ein Knoten im Gehirn.
Vielen Dank.