Hallo zusammen,
da wir gerade so einen schönen Thread über formatierte HEX-Ausgabe hatten, hier mal was zur formatierten float-Ausgabe. Wie ihr wisst, ist die float-Ünterstützung bei den kleinen AVR-Prozessoren nicht in der printf-Familie drin.
Ich habe da mal eine kleine Funktion gebaut, wie man die Ausgabe trotzdem formatieren kann.
/* Formatiert ein float auf max. Länge des Puffers */
size_t formatFloat(char *puffer, uint8_t pufLen, float wert, uint8_t vorKomma, uint8_t nachKomma) {
uint16_t faktor = 10, ganz, nach;
char format[10] = "%0";
char fnum[2];
if (nachKomma > 4) { // unsinnig
return 0;
}
if (vorKomma+nachKomma+2 > pufLen) { // passt nicht
return 0;
}
for(uint8_t i=0; i < nachKomma-1; i++) faktor *= 10;
fnum[0] = vorKomma+0x30;
fnum[1] = '\0';
strcat(format, fnum);
strcat(format, "d.%0");
fnum[0] = nachKomma+0x30;
strcat(format,fnum);
strcat(format,"d");
wert *= faktor;
ganz = wert / faktor;
nach = (uint16_t)abs(wert) % faktor;
sprintf(puffer,format,ganz,nach);
return strlen(puffer);
}
char puffer[10];
void setup() {
Serial.begin(115200);
Serial.println("Start");
formatFloat(puffer, sizeof(puffer), 11.23,3,1);
Serial.println(puffer);
formatFloat(puffer, sizeof(puffer), 11.23,3,2);
Serial.println(puffer);
formatFloat(puffer, sizeof(puffer), 11.03,3,2);
Serial.println(puffer);
}
void loop() {}
Gruß Tommy