@Rubi
Vielen Dank, werde es morgen früh ausprobieren.
Druckbare Version
@Rubi
Vielen Dank, werde es morgen früh ausprobieren.
Guten Morgen an alle!
Habe jetzt die stdio.h included. Bekomme dann nur die Meldung, dass ein double format vorliegt, aber ein float verwendet wird. Das ist ja weiter nicht schlimm. Ansonsten wird der Befehl sprintf... vom Compiler erkannt.
#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"
#include <stdio.h>
float f_z=15.5;
char buffer[20];
void lcd_display(void)
{lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_gotoxy(0,0);
sprintf(buffer,"=%f",f_z);
lcd_puts(buffer);
}
int main...
Ich bekomme immer noch nur "=?" angezeigt. Kann es sein, das die Funktion lcd_puts(buffer) keine Float-Werte weitergeben kann? Ich habe mal die Lib mit angefügt, wo dieser Befehl declariert wurde. Wenn ich sprintf(buffer,"=%d",f_z); verwende bekomme ich "=-13107". Bei int a=5 und sprintf(buffer,"=%d",a) bekomme ich "=5" angezeigt.
Der Befehl ftio(f_z,buffer,10) wird gar nicht erkannt. Fehlermeldung "implicit declaration". Habe ich irgendeine Header-Datei vergessen?
also dann gibt es folgende möglichkeiten, du kannst vorher auf float casten,
sollte aber nicht notwendig sein und vielleicht solltest du vorher explicit die vor und nachkommastellen angeben:
sprintf(buffer,"%-2.2f",(float)f_z);
Das bedeutet 2 Vorkommastellen und 2 Nachkommastellen.
Wenn Du es Heute nicht hinbekommst, schaue ich es mir mit meinem STK an. Wäre ja gelacht wennn wir das nicht hinbekommen.
LG
Rubi
?- bekomme ich dann immernoch angezeigt. Was meinst du mit "auf float casten"?
Wieso zeigt er mir eigentlich ein Fragezeichen an? Müste das Prog eigentlich gar nichts anzeigen, wenn die Werte auserhalb eines Bereiches liegen?
Man, so viele ?-Zeichen habe ich noch nie in einem Test verwendet.
Sorry nichtZitat:
Zitat von Rosenthal
ftio(f_z,buffer,10)
sondern:
ftoa(f_z,buffer,10);
Binmir jetzt aber nicht sicher ob das in ANSI C unterstützt wird.
Im Internet habe ich gerade gelesen das anstelle von ftoa gcvt verwendet wird.
d.h.:
gcvt(f_z,4,buffer);
Die 4 bedeutet die Anzahl der Ziffernd die Übersetzt werden sollen.
Ohne es selbst zu compilieren ist das ein wenig wie im trüben zu fischen.
Das sprintf nicht bei Dir funktioniert ist seltsam.
Das mit dem Fragezeichen auch.
Hast Du anstelle des , schon einen . als commaseparator probiert?
Casten bedeutet einen Typ in einen anderen zu konvertieren.
Das wird häufig dann verwendet wenn du eine Funktion aufrufst die einen anderen Datentyp verlangt als den mit dem Du zur Zeit arbeitest.
Meißtens geht es zwar auch ohne, aber so wird man die Warnungen los,...
Ein sauberer Code sollte keine Warnungen produzieren.
Nein mit der Library sollte es nichts zu tun haben.
Für die Library wird deine Zahl ja in einen String umgewandelt.
LG
Rubi
Probier mal
float f_z = 15,5;
LG
Rubi
Hatte im Code ftoa(f_z,buffer,10) stehen gehabt, war nur oben ein Schreibfehler.
Er bricht aber die Compilierung mit der Meldung "implicit declaration of funktion 'ftoa'" ab. Obwohl bei itoa... keine Meldung erscheint.
Die selbe Fehlermeldung erscheint mit gcvt(f_z,4,buffer).
Bei 15,5 anstatt 15.5 bricht der Compiler ebenfalls ab."parse error before numeric constant"
Falls es noch weitere Vorschläge gibt, bitte schreiben.
Bitte probier noch dieses:
ftoa (f_z, buffer, 2, 2);
LG
Rubi
Wie immer "test_lcd.c c:29: warning: implicit declaration of funktion 'ftoa'
Dann bricht der Compiler ab.
Hm
Ich werde es zu hause selbst einmal probieren.
LG
Rubi