FireBeetle OLED12864 Variabel ausgeben

Hallo

Ich versuche mit am FireBeetle OLED12864 Display und habe den Beispiel Sketch erfolgreich am laufen.

Ich möchte auf dem Display eine Variabel ausgeben, jedoch weiss ich nicht wie.

Anbei ein Ausschnitt mit dem fett markierten Text String gefolgt von meiner Variabel.

void drawFrame2(OLEDDisplay display, OLEDDisplayUiState state, int16_t x, int16_t y)
{
// Demonstrates the 3 included default sizes. The fonts come from DFRobot_OLED12864Fonts.h file
// Besides the default fonts there will be a program to convert TrueType fonts into this format
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawString(0 + x, 10 + y, "Variabel: ", 'test');
display->setFont(ArialMT_Plain_16);
display->drawString(0 + x, 20 + y, "Arial 16");
display->setFont(ArialMT_Plain_24);
display->drawString(0 + x, 34 + y, "Arial 24");
}

Als Fehlermeldung erhalte ich immer:

exit status 1
no matching function for call to 'OLEDDisplay::drawString(int, int, const char [11], int)'

Ich vermute es liegt an der Option "display->drawString"
Aber ich wüsste nicht was ich ändern müsste.

Besten Dank.

Gruss Philippe

Als Fehlermeldung erhalte ich immer:

exit status 1
no matching function for call to 'OLEDDisplay::drawString(int, int, const char [11], int)'

Glaube der Meldung!

Ich vermute es liegt an der Option "display->drawString"

Das ist keine Option, sondern eine Methode.

display->drawString(0 + x, 10 + y, "Variabel: ", 'test');
das ist unsinnig!

  1. es kann keine 2 Strings
  2. das zweite ist noch nicht mal ein c-string
  3. und beide schon garnicht so nutzbar

Bastel deine Zeichenkette in einem Buffer zusammen, und dann gib sie aus.
z.B.

int test = 42;
display->drawString(0 + x, 10 + y, String("Variabel: ") + test);

Besten Dank, so funktioniert es.

Für den Fall einer Temperaturausgabe würde ich es demnach so machen:

display->drawString(0 + x, 10 + y, String("Temperatur: ") + temp + "°C");

Ist das ok oder gibt es einen eleganteren Weg?

Hi

Da der Text 'Temperatur:' sich wohl nicht allzu oft ändern wird, könntest Du Diesen auch nur 1x ausgeben und Dich danach nur noch um die Temperatur kümmern.
Dabei wirst Du die alte Temperatur wohl in Hintergrundfarbe schreiben müssen, um Diese zu löschen und dann die Neue in Vordergrundfarbe.

Je mehr Du löscht und wieder neu schreibst, desto eher fällt ein Flackern auf (das Display ist kurz leer/schwarz).

Weitere Stolpersteine wird Es mit der Anzahl der Stellen der Temperatur geben - aber Das wirst Du wohl selber auch heraus finden :wink:

MfG

Diese Lib ist auch so ein seltsames Ding:

Intern wird weitestgehend mit char * gearbeitet, die paar Kleinigkeiten könnte man auch noch ersetzen. Nach außen hin wird alles mit String gemacht.

Der Sinn davon erschließt sich mir nicht wirklich oder soll das "scheinbare Einfachheit um jeden Preis" bedeuten?

Gruß Tommy

Der Sinn davon erschließt sich mir nicht wirklich oder soll das "scheinbare Einfachheit um jeden Preis" bedeuten?

Fast eine interessante Frage.
Mir schmeckt es auch nicht unbedingt, dass das Display Objekt als Pointer übergeben wird. Eine Referenz würde evtl näher liegen.

Allerdings dürfte es möglich sein, die betreffenden Methoden zu überschreiben, wenn man das ernstlich möchte.

Ja, könnte man, wenn man an dem Display interessiert ist.
Ich habe nur mal kurz in die Lib rein geschaut, da ich das Display nicht habe.

Gruß Tommy