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 | }
|