CO2 Meßgerät mit ESP32, SCD41 und LCD 1"8x64

OP #8109996

Hallo, ich habe zwar schon einiges mit ATMEL in ASM gemacht, aber das hilft mir hier nicht weiter! In C bin ich leider überhaupt nicht zuhause.

Wie weit bin ich gekommen?

Ich habe mit der Arduino IDE den SCD41 ausgelesen und habe auch das Display so gestaltet, wie es letztendlich aussehen soll. Siehe die beiden .ino Dateien und das Bild im Anhang.

Nun habe ich aber keine Ahnung, wie ich die ausgelesenen Daten in das Display bekomme.

Vielleicht kann mir jemand helfen.

Angehängte Dateien:
OP #8110212

Vorab eine Korrektur: Im Titel muß statt LCD 1"8x64, LCD 128x64 stehen.

Da ich bis jetzt keine Antwort bekommen habe, gehe ich davon aus, daß die Frage zu viel Arbeit gemacht hätte.

Ich habe inzwischen die beiden .ino Dateien zu einer gemacht und meine Frage ist nun, wie ich in die Ausgabe an das LCD eine Variable einbinden kann?

1
u8g2.setFont(u8g2_font_fub30_tr);  
2
u8g2.drawStr(15,46,"1000");  
3
u8g2.setFont(u8g2_font_ncenB08_tr);  
4
u8g2.drawStr(5,60,"22,3");  
5
u8g2.drawStr(100,60,"45");  
6
u8g2.sendBuffer();           
7
// Print results in physical units.
8
Serial.print(co2Concentration);
9
Serial.print(temperature);
10
Serial.print(relativeHumidity);

Ich möchte also die festen Werte 1000, 22,3 und 45 ersetzen durch die Variablen co2Concentration, temperature und relativeHumidity.

#8110220

Bruno M. schrieb:

Da ich bis jetzt keine Antwort bekommen habe, gehe ich davon aus, daß die Frage zu viel Arbeit gemacht hätte.

Nicht so ungeduldig. Sonst musst du Claude fragen.

Ich möchte also die festen Werte 1000, 22,3 und 45 ersetzen durch die Variablen co2Concentration, temperature und relativeHumidity.

Deine "Werte", die du an die Graphik übergibst, sind Texte.
Du musst also aus deinen Messwerten formatierte Texte erzeugen, damit du sie an deine Anzeigeroutine übergeben kannst, also z.B. mit sprintf();

: Bearbeitet durch User
(Firma: 1984now) #8110223

Bruno M. schrieb:

ich habe zwar schon einiges mit ATMEL in ASM gemacht

Offensichtlich bei weitem nicht genug, sonst wäre dir sofort klar, was der fehlende Schritt zur Lösung deines Problems sein muss...

u8g2.drawStr(15,46,"1000");

ersetzen durch die Variablen co2Concentration, temperature und relativeHumidity.

Die Methode drawStr unterstützt (vermutlich) nur Strings und die drei Variablen haben (wieder: vermutlich) eine numerischen Typ. Wenn das so ist, gibt es zwei Lösungsmöglichkeiten:

Entweder stellt u8g2 (was auch immer das ist) eine Methode bereit, die mit den numerischen Daten etwas sinnvolles anfangen kann. Dann musst du die einfach nur benutzen.

Oder es gibt keine entsprechende Funktion. Dann musst du selber einen Weg finden, aus den numerischen Daten einen String zu basteln. Das wäre übrigens auch in Assembler der Lösungsweg...

#8110228

Ob S. schrieb:

Die Methode drawStr unterstützt (vermutlich) nur Strings

Ich wage die kühne Behauptung dass

u8g2.drawStr(15,46,"1000");

im dritten Argument auch einen Pointer auf einen (variablen) String erlaubt, da das Argument "1000" nichts anderes ist als ein Pointer auf einen konstanten String.

1
char tmpstr[80];
2
sprintf (tmpstr, "%5.1f", temperature);
3
u8g2.drawStr(5, 60, tmpstr);
(Firma: 1984now) #8110244

Wastl schrieb:

Ich wage die kühne Behauptung dass u8g2.drawStr(15,46,"1000"); im dritten Argument auch einen Pointer auf einen (variablen) String erlaubt

Und ich wage die Behauptung, dass u8g2 über eine (eigentlich sogar mehrere) print-Methoden verfügt, die mit numerischen Argumenten umgehen können. Allerdings nur mit ganzzahligen.

Könnte trotzdem nützlich sein, gerade bei kleinen AVRs...

#8110250

https://github.com/olikraus/u8g2/wiki/u8g2reference#print

1
This function can print variable values and supports the F() macro.
2
Arguments: See link.
3
Returns: -
4
Note 1: This function depends on the current font mode and drawing color.
5
Note 2: Use print(u8x8_u8toa(value, digits)) or print(u8x8_u16toa(value, digits)) to print numbers with constant width (numbers are prefixed with 0 if required).

Also mal “print” probieren?

OP #8110259

Wastl schrieb:

Ob S. schrieb:

Die Methode drawStr unterstützt (vermutlich) nur Strings

Ich wage die kühne Behauptung dass u8g2.drawStr(15,46,"1000"); im dritten Argument auch einen Pointer auf einen (variablen) String erlaubt, da das Argument "1000" nichts anderes ist als ein Pointer auf einen konstanten String.

char tmpstr[80];

sprintf (tmpstr, "%5.1f", temperature);

u8g2.drawStr(5, 60, tmpstr);

Herzlichen Dank, das hilft weiter!

Antwort schreiben

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.