fehler in anzeige von float
|
11.04.2015, 18:39
Beitrag #1
|
|||
|
|||
fehler in anzeige von float
ich habe hier eine Funktion mit der ich eine fließkommazahl auf einem Display ausgeben kann. ich übergebe beispielsweise "floatNumber = 125.347" und "decimal = 1" doch die Angabe der kommastellen wird nicht richtig behandelt wie es scheint.
es spielt dabei keine rolle wie groß der wert aktuell ist, die Funktion merkt sich wohl die maximal erkannte länge und behält diese anstelle sie wieder zu verringern. da ich nicht so viel Ahnung vom Arduino programmieren habe, bitte ich euch mal über den Code zu kucken wo der Fehler liegt. Code: unsigned char SeeedOLED::putFloat(float floatNumber,unsigned char decimal) |
|||
11.04.2015, 19:06
Beitrag #2
|
|||
|
|||
RE: fehler in anzeige von float
Hi,
kannst Du das Fehlerbild mal mit ein paar Beispielen veranschaulichen? Gruß, Thorsten Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen. |
|||
11.04.2015, 20:05
(Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2015 20:26 von avoid.)
Beitrag #3
|
|||
|
|||
RE: fehler in anzeige von float
na klar.
Beispiel: ich habe z. b. die startwerte "floatNumber = 123,456" und "decimal = 1". dann bekomme ich "123,4" ausgegeben wie es sein soll. fehlerbild: der wert darf nicht unter 100 fallen, sonst verschiebt sich die kommastelle nach links. Beispiel hierfür könnte dann so eine ausgabe sein: "95,75" Vermutung: größe des ausgabestring mit 5 zeichen wird zu beginn irgendwo gespeichert und die angabe nur eine kommastelle an zu zeigen nicht weiter beachtet. weiteres Beispiel: ich habe z. b. die startwerte "floatNumber = 3,456" und "decimal = 1". dann bekomme ich "3,4" ausgegeben wie es sein soll. fehlerbild: beim steigen des wert auf z. b. 10 oder 100 wird das komma zwar richtig nach rechts verschoben. Beispiel hierfür könnte dann so eine ausgabe sein: "10,4" oder "100,4" sinkt der wert dann aber wieder in den 10er oder 1er Bereich ab, verschiebt sich wieder das komma und ich bekomme zu viele stellen hinter dem komma angezeigt und der string verlängert sich quasi. ich hoffe die Beschreibung hilft. -----nachtrag------ mir ist gerade aufgefallen: wenn ich einen String hinterherschiebe um z. b. "°" um das Symbol für Grad an die float zahl zu hängen dann tritt der fehler nicht auf. die Library die ich verwende ist diese hier http://www.seeedstudio.com/wiki/images/a...142012.zip |
|||
11.04.2015, 20:44
Beitrag #4
|
|||
|
|||
RE: fehler in anzeige von float
Hi,
ich verstehe Deine Beispiele nicht wirklich. Kannst Du einfach mal die eigentliche Zahl mit der Ausgabe gegenüber stellen? Außerdem wäre vielleicht Dein kompletter Code nützlich. Gruß, Thorsten Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen. |
|||
11.04.2015, 21:01
(Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2015 21:02 von rkuehle.)
Beitrag #5
|
|||
|
|||
RE: fehler in anzeige von float
Klingt für mich ein wenig danach, dass vorhergehende Ausgaben mit aktuellen überschrieben werden ohne vorher den Darstellungsbereich zu clearen.
Von daher vielleicht ein Darstellungs- , kein Berechnungsproblem. Man müsste mal den Code sehen ![]() Grüße RK Nüchtern betrachtet...ist besoffen besser ![]() |
|||
11.04.2015, 22:30
(Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2015 23:15 von avoid.)
Beitrag #6
|
|||
|
|||
RE: fehler in anzeige von float
hier das ist der code den ich verwende.
Code: /* Es gibt keine eigentliche zahl, da es sich um einen sensorwert handelt der sich ändern kann. In "heading" befindet sich die Grad Zahl eines Kompasssensor. Wenn ich die Zeile (34) mit dem Grad Zeichen auskommentiere dann spinnt das Komma rum. Hm, Darstellungsproblem ..., gut möglich. Aber ob das eine Zeichen dann wirklich so ausschlaggebend ist? ---nachtrag--- Ich glaube das mit dem Darstellungsproblem ist der fall. Mir ist gerade aufgefallen dass das Grad Zeichen gar nicht dargestellt wird, fehlt wohl im Zeichensatz, also ist an der stelle ein leer. Damit wird dann wohl die kommastelle gelöscht die dort vorher stand und das vermittelt den Eindruck als währe alles ok. bestätigt, wenn ich von 359,x° auf 0,1° wechsle bleibt die kommastelle stehen als hätte man vergessen sie zu löschen. klar liegt ja im ram des Display und keiner überschreibt sie. ---nachtrag 2--- hab eben mit folgenden Codeteilen das Grad Zeichen eingebaut. Code: static unsigned char GradIco[] PROGMEM ={ da könnte doch eine schleife helfen... Code: if (länge_alt > länge_aktuell){ füge leerzeichen an } |
|||
11.04.2015, 23:47
(Dieser Beitrag wurde zuletzt bearbeitet: 12.04.2015 00:02 von avoid.)
Beitrag #7
|
|||
|
|||
RE: fehler in anzeige von float
Auch wenn man sich nicht selbst antworten sollte, mach ich das jetzt mal.
Problem zumindest abgefangen. Hab ne schleife gebaut die Leerstellen anfügt wenn die zahl kleiner wird. Damit wird der RAM Inhalt des Display überschrieben und gut ist es. Hier noch der berichtigte Code und danke für den schups in die richtige Richtung. Code: /* Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus. bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke |
|||
12.04.2015, 08:05
Beitrag #8
|
|||
|
|||
RE: fehler in anzeige von float
Moin,
ach das ist das alte Problem... formatiere den Zahlenwert doch einfach mit sprintf() dann kannst du die Breite vom Ausgenfeld und die Anzahl der Nachkommastellen definieren. Dann noch den so gewonnenen String aufs Display schieben und alles passt. Über die Syntax von sprintf einfach mal ne Suchmaschine beauftragen... Gibt aber auch andere Befehle wo die Kollegen in dem Fall schon angewendet haben, vielleicht steuert das noch einer bei... ![]() lg bk 1+1 = 10 ![]() ![]() |
|||
|
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste