Hallo,
ich habe mit dem 1,3" OLED u8g2 ein klitzekleines Problem.
Schaut mal im Anhang.
Wo kommt das große B vor dem °C her und wie bekomme ich das weg?
Das hier ist mein Code:
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2h_tf);
u8g2.drawStr(23,10,"Wetterstation");
u8g2.setFont(u8g2_font_crox1h_tf);
u8g2.drawStr(0,28,"Temperatur :");
u8g2.drawStr(63,28,"-21,00");
u8g2.drawStr(108,28,"°C");
u8g2.drawStr(0,44,"Luftfeuchte :");
u8g2.drawStr(63,44,"82,00");
u8g2.drawStr(108,44,"%");
u8g2.drawStr(0,60,"Luftdruck :");
u8g2.drawStr(63,60,"1095,00");
u8g2.drawStr(108,60,"hPa");
u8g2.sendBuffer();
delay(1000);
}
Ist das B auch weg, wenn Du das ° weg läßt?
Gruß Tommy
Dann dürfte das ° einen anderen Code haben und in Deinem Text ist es ein 2-Byte-Unicode.
Ich habe die Fonts von u8g2 aber nicht hier, um da nachzuschauen.
Schau mal in Deiner Installation in die Fontdatei.
Gruß Tommy
möglicherweise kommts aus dem UTF-8 C2 B0 für Grad.
Kannst mal testweise ein micro setzen? µ das hätte C2 B5 und wenn da auch ein B davor kommt, dann kanst imho nichts dagegen tun. Liegt dann an der Lib.
Wenn im Code µC steht zeigt das Display BµC an. >:(
Du brauchst nur Text? Dann probiere mal vom gleichen Autor die u8x8, die hat andere Fonts.
Oder lass Dir alle Zeichen >127 und <=255 ausgeben, evtl. ist da ° dabei.
Gruß Tommy
;-( - fast wie erwartet.
Dann kannst jetzt nur im Font der Lib nachsehen, obs irgendwo einen Hinweis gibt, obs ein Grad zeichen gibt, und welches Zeichen du dafür senden musst...
Probier mal 0xB0 (dez. 176) als Zeichen für °.
Gruß Tommy
Zu deiner Library gibt es eine Fontdatei und in dieser kannst du nachschauen, welche Zeichen vorhanden sind bzw. welche Zeichen nicht. Wenn nicht, verwendest du einfach einen anderen Font.
michaelkies:
Wo kommt das große B vor dem °C her und wie bekomme ich das weg?
Eine vollkommen Zeichensatz-/Kodierungsfreie Lösung: Schreib „Deg.“
Gruß
Gregor
Tommy56
February 1, 2021, 3:45pm
13
char gC[3] = {176,'C',0};
und das dann mit drawStr ausgeben?
Gruß Tommy
uxomm
February 1, 2021, 3:59pm
14
mach statt
u8g2.drawStr(108,28,"°C");
das:
u8g2.drawUTF8(108,28,"°C");
agmue
February 1, 2021, 7:04pm
15
Auch enableUTF8Print() ist eine Option, da dies manchmal einfacher scheint. Zum drüber Nachdenken (getestet mit ESP32):
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print()
}
void loop(void) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_crox2h_tr);
u8g2.drawStr(23, 10, "Wetterstation");
u8g2.setFont(u8g2_font_crox1h_tf);
float temp = -21.00;
float lf = 82.00;
float ld = 1095.00;
anzeige(0, 28, "Temperatur ", temp, "°C");
anzeige(0, 44, "Luftfeuchte ", lf, "%");
anzeige(0, 60, "Luftdruck ", ld, "hPa");
u8g2.sendBuffer();
delay(1000);
}
void anzeige( byte spalte, byte zeile, const char *text, float wert, const char *einheit) {
char buf[30];
snprintf ( buf, 30, "%s: %8.2f %s", text, wert, einheit );
u8g2.setCursor(spalte, zeile);
u8g2.print(buf);
}
system
Closed
June 1, 2021, 7:04pm
16
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.