stm32 LCD Float-Wert runden und Nachkommastellen kürzen

Gast #6654463
Lesenswert?

Hallo liebes Forum,

ich programmiere mit einem stm32f3discovery (auf welchem sich ein 
STM32F303 befindet) und verwende die standard peripheral library von 
STMikroelectronics. An diesem habe ich ein 2004-LCD über eine 
I2C-Schnittstelle angeschlossen.
Ich möchte nun Float-Werte an diesem Display anzeigen lassen.
Dafür habe ich mir eine Funktion geschrieben, welche mir den Float-Wert 
auf beliebige Nachkommastellen rundet. Anschließend wird dieser 
Float-Wert in Char-Werte umgewandelt und in ein Array geschrieben 
(mittels sprintf).

Das Runden und Anzeigen funktioniert, allerdings werden mir nach diesen 
Nachkommastellen weitere Nullen angezeigt.
Ein Beispiel mit 2 Nachkommastellen: Der float-wert -1.2355678 wird am 
LCD als -1.240000 angezeigt. Stattdessen möchte ich, dass am LCD nur 
-1.24 angezeigt wird.

Welche Tipps habe ihr, damit ich mein Problem möglichst effektiv lösen 
kann?
Der Code zum Runden sieht wie folgt aus:


1
void lcd_convert_float(float fvalue, uint8_t decimal_points)
2
{
3
  char string_value[16]={};        // hier wird der in char-umgewandelte Sensorwert gespeichert
4
  float factor = 1;
5
  uint8_t decimal_counter = decimal_points;
6

7
  if (decimal_counter > 2)    // maximal erlaubte Anzahl an Nachkommastellen: 2
8
    decimal_counter = 2;
9

10
  while(decimal_counter)
11
  {
12
    fvalue *= (float)10;
13
    factor *= 10;
14
    decimal_counter--;
15
  }
16

17
  int16_t runden = roundf(fvalue);
18
  fvalue = (float)runden / factor;
19

20
  sprintf(string_value,"%f", fvalue );    // umwandlung von float in char (char-wert wird ins Array geschrieben)
21
  lcd_print(string_value);                       // Wert auf LCD anzeigen
22
}
Gast #6654650
Lesenswert?

Zeno schrieb:
> Kann man die 2 nicht als Variable definieren? Bei Pascal wäre das kein
> Problem.

Das wäre mir neu. Auf jeden Fall hindert dich niemand daran, diesen 
Format-String dynamisch (wiederum mit sprintf) zu generieren bevor du 
die Zahl formatierst.
Gast #6654725
Lesenswert?

Stefan ⛄ F. schrieb:
> Das wäre mir neu. Auf jeden Fall hindert dich niemand daran, diesen
> Format-String dynamisch (wiederum mit sprintf) zu generieren bevor du
> die Zahl formatierst.

Den String mit strcat zusammensetzen sollte doch auch möglich sein.
Naja hier zeigen sich wieder mal die Unzulänglichkeiten von C bei 
Stringverarbeitung.
Bei Pascal(Delphi) gibt es da eine einfache Funktion (FloatToStrF()), 
die macht genau das was der TO haben will in einem Rutsch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren