-
-
Erfahrener Benutzer
Begeisterter Techniker
Befehl sprintf
Habe in einem Code den sprintf gefunden. Habe auch ein Stück code kopiert. Es geht ein einfach nicht so wie es soll. Damit soll die Spannung an einem Rob gemessen werden. Die Spannung liegt ständig am IC an und wird mit float berechnet und anschliessen angezeigt. Bekomme zwar die Anzeige Batterie und V aber als wert wird nur ein ? angezeigt. Die enrsprechenden Dazei habe ich eingebunden.
bot_update();
char text [32];
float ubatt = 0.0166 * bot_supply - 1.19;
sprintf(text, "%3.1fV",ubatt);
gfx_move(25, 0);
gfx_set_proportional(1);
gfx_print_text("Batterie :");
gfx_set_proportional(1);
gfx_print_text(text);
-
Erfahrener Benutzer
Roboter Experte
Der sprintf-Befehl ist eindeutig richtig.
Das Problem liegt wohl eher an deiner Berechnung von ubatt.
Versuch es mal folgendermaßen: float ubatt = 0.0166f * bot_supply - 1.19f;
Wenn das nicht klappt, versuch mal einen konstanten Wert (z.B. 6.4) mit sprintf auszugeben. wenn das nicht klappt, müssen wir weiterschauen.
Gruß, Yaro
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo
habe gleich die Sache ubatt ausprobiert. Das war leider ohne Erfolg. Als nöchstes mache ich den konstanten wert. mal sehen ob das geht.
Achim
-
Erfahrener Benutzer
Roboter Experte
Welchen Compiler verwendest du?
Gruß, Yaro
-
Erfahrener Benutzer
Begeisterter Techniker
Ich nehme AVRStudio4. Wenn ich die Zeilen -WI, -u, -vprintf eingebe bekomme ich diese Fehlermeldung. Komme nicht ganz mit
"cc1.exe: error: unrecognized command line option "-WI""
Achim
-
Erfahrener Benutzer
Roboter Experte
Der Error sagt, dass die Option -WI von ihm nicht erkannt wird.
Kenne mich damit leider nicht aus, kann da also nicht weiterhelfen.....
Hast du sprintf schon versucht, mit einer Konstanten auszuführen?
sprintf(text, "%3.1fV",6.7534f);
Hat es geklappt, oder nicht?
Gruß, Yaro
-
Erfahrener Benutzer
Robotik Einstein
Achtung Falle: Ein grosses I sieht fast genau so aus wie ein kleines l.
Die Option ist -Wl.
Was ich hier oft noch machen muss: Die Libs libm.a und libprintf_flt.a dazulinken, dass aus dem ? ein brauchbarer Wert wird.
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo
erst mal danke für die Antwort. Habe es gleich ausprobiert. Wenn ich eine Zahl eintippe im sprintf bekomme ich meldung das es double sein soll und keine Anzeige bzw. wird abgebrochen. Habe alles versucht so mit kleinen l und i und 1 und alles gross. Die Datein sind eingebunden. Bekomme trotzdem Fehlermeldung. Nach dem Tutorial soll ich die Datein bei Customer Options > Linker Options eingeben. Richtig?
Achim
-
Erfahrener Benutzer
Roboter Experte
Versuch es mal so:
float a = 4.3f;
sprintf(text, "%3.1fV",(double)a);
So sollte zumindest keine Fehlermeldung auftreten.
stdio.h hast du doch sicherlich eingebunden, oder?
Gruß, Yaro
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo yaro
Habe das Programm so geändert wie du es beschrieben hast. Das ? bleibt.Ich bekomme kein Ergebnis. Wenn ich die Datei -vfprintf bei Linker Options eintrage bekomme ich wieder einen Fehler angezeigt. Die stdio.h steht im Kopf, wenn ich sie stdio_init() bekomme ich auch einen Fehler. Kennst du vielleicht einen anderen Weg um die Spannung anzuzeigen ohne sprintf. Es geht doch dabei nur um die Umrechnung und die ricjtige Darstellung.
Achim
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen