Anzeigeproblem bei Festkommazahl

Hallo, ich wollte auf meinem Display zwei Festkommazahlen im Format xxx.xx mit dem dezimalpunkt an der achten Stelle des Displays anzeigen, aber bekomme immer nur 5 fließende Stellen mit unterschiedlichen platz des Punktes zustande. habe bereits etliche Versuche mit unsigned long und double und float und Formatierungen ( die immer Fehlermeldungen bringen) hinter mir. vielleicht kann mich jemand auf die richtige Fährte bringen....

Arduino Uno mit Standard LCD 2x16Stellen. Alle Funktionen der Anzeige laufen aber ich bin mir sicher , das der Code nicht richtig ist...

/*

vielen Dank im voraus Udo

Float mit print() zu formattieren geht eigentlich einfach: http://arduino.cc/en/Serial/Print

float f = 12.1123;
mylcd.print(f, 2);

Ansonsten gibt es dtostrf(): http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42 http://www.mikrocontroller.net/topic/86391 Damit kann man auch die Gesamt-Breite einstellen. Also dass z.B. 1.12 und 12.34 die gleiche Breite haben. Und man kann zwischen linksbündig und rechts-bündig wählen.

Wow,

Das hat echt cool geklappt....

mylcd.print(dtostrf(val,6,2,ascii)); und schon habe ich meine Wunschanzeige.

diese Funktion gibt es nicht mal in dem Handbuch "C von A bis Z"

Herzlichen Dank an Serenifly

Udos-Ino: diese Funktion gibt es nicht mal in dem Handbuch "C von A bis Z"

Weil es keine Standard C Funktion ist. Ist auch unter der Überschrift "Non-standard (i.e. non-ISO C) functions"

In C braucht man das nicht, weil man da Gleitkommazahlen mit printf() formatieren kann. printf() gibt es hier auch, aber das geht standardmäßig nicht mit Gleitkommazahlen.

Beachte übrigens dass das Array Platz für den Null Terminator haben muss. Also für 6 Zeichen muss es 7 groß sein!

Und beachte auch daß Fleißkommazahlen auf dem Arduino nur 6 bis 7 significante Stellen hat. Grüße Uwe

also es funktioniert bei mir sogar mit float statt double und mit _ width 6.... vielleicht wird der Dezimalpunkt nicht mitgerechnet.

Udo

float und double sind auf dem Arduino identisch ;)

Und dass es funktioniert, ist kein Beweis, dass es richtig ist. Wenn dein Feld ascii zu klein ist, stört das nur irgendwas anderes, was in der Nachbarschaft liegt. Das merkst du dann irgendwann, vielleicht.

The caller is responsible for providing sufficient storage in s

Wenn du Änderungen über reset speichern und wiederverwenden willst, muss du das eeprom nehmen.

michael_x: float und double sind auf dem Arduino identisch ;)

Auf den AVRs ja. Auf dem Due ist double 8 Byte/64 Bit groß