/* ------------------------------------------ u8g_floatout.ino ------------------------------------------ */ #include "U8glib.h" U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8 /* ------------------------------------------------------------ my_ftoa konvertiert einen Floatwert in einen Ansi-C String ( kein String aus der class string ). Uebergabe: *s : Pufferspeicher, der den String aufnimmt. Achtung, ist der Pufferspeicher nicht gross genug ueberschreibt diese Funktion gnadenlos die dem Pufferspeicher nachfolgenden Variablen f : zu konvertierender Float-Wert komma : Anzahl der Nachkommastellen ------------------------------------------------------------ */ void my_ftoa(char *s, float f, char komma) { typedef enum boolean { FALSE, TRUE }bool_t; static uint32_t zz[] = { 10000000, 1000000, 100000, 10000, 1000, 100, 10 }; bool_t not_first = FALSE; uint8_t zi; uint32_t z, b; uint32_t i; for (i= 0; i< komma; i++) f= f * 10; i= f; komma= 8-komma; if (!i) { *s = '0'; s++; } else { if(i < 0) { *s = '-'; s++; i = -i; } for(zi = 0; zi < 7; zi++) { z = 0; b = 0; while(z + zz[zi] <= i) { b++; z += zz[zi]; } if(b || not_first) { *s = '0' + b; s++; not_first = TRUE; } if (zi+1 == komma) { if (!not_first) { *s = '0'; s++; } *s= '.'; s++; not_first= TRUE; } i -= z; } *s = '0' + i; s++; } *s = 0; } void setup(void) { u8g.setRot180(); u8g.setFont(u8g_font_profont12); } float f = 4.612; char s[30]; void loop(void) { f += 2.614; // irgendeine Rechnung if (f > 300) f= 4.61; delay(1000); my_ftoa(&s[0], f, 3); // Hier kommt die Ausgabe hin ! u8g.firstPage(); do { u8g.drawStr(0,24, "Ergeb:"); u8g.drawStr(46, 24, s); } while(u8g.nextPage() ); }