Problem mit der Ausgabe einer Zahl am LCD

OP (Firma: TGM) #1606446
Lesenswert?

HI!

Ich habe wiedermal ein kleines Problem beim Programmieren. Und zwar 
übergebe ich meiner Funktion vier Werte und diese soll sie dann mehr 
oder weniger nur multiplizieren und das Ergebnis dann am LCD ausgeben.
Jedoch dürfte irgendwas bei der Rechnung passieren oder die Zahl einfach 
zu groß werden, was aber nicht sein dürfte. Alle Werte hab ich mit 444 
angenommen. Jeden Wert einzeln kann ich ausgegeben, dass heißt es kann 
lediglich an der Zeile mit der Rechnung oder beim umwandeln auf char ein 
Fehler sein.
In der Ausgabe steht dann statt der Zahl ein Fragezeichen.
1
void zeilenscan(int laengex, int laengey, int anfz, int endz)    //Steuert die zwei Motoren in einem Zeilenscannverfahren. Zeilen sind durch ez und iz vernderbar
2
{  
3
  int xz;  
4
  int d;
5
  int yz;
6
  float dauer;
7
  char buffer[20]="";
8
  lcd_puts("Dauer der \n");
9
  //dauer=laengex*laengey*(endz-anfz+1)/60;
10
  dauer=laengex*laengey;
11
  lcd_puts("Messung:");
12
  lcd_gotoxy(9,1);
13
  sprintf(buffer,"%d",dauer);
14
  lcd_puts(buffer);

Schon mal ein Dankeschön im Voraus für die Hilfen!

Lg Oliver
#1606450
Lesenswert?

Ich gehe mal davon aus, dass zuerst laengex*laengey als int ausgerechnet 
wird, was einen Überlauf ergibt, und das (falsche) Ergebnis wird dann in 
ein float konvertiert.

Ach ja: Im sprintf - bedeutet %d nicht eine Ganzzahl? "dauer" ist aber 
ein float.

Summa summarum: Probier's einfach mal mit einem anderen "dauer", z. B.:

long int dauer;
Gast #1607043
Lesenswert?

..ich muss schon wieder die Ingrid machen:
Ein anständiger(tm) Compiler meckert die fehlerhaften Typen übrigens 
sogar an (-Wall regelt :-) :
1
$ avr-gcc -Wall -c main.c -o main.o
2
main.c: In function ‘zeilenscan’:
3
main.c:7: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘float’

HTH
OP (Firma: TGM) #1607055
Lesenswert?

dauer ist jetzt ein int.
Der Fehler ist nur, dass, wenn die Zahl größer als 500 wird der Datentyp 
zu klein werd oder so und dann wird irgendwas angezeigt.
Aber die Zahlen werden ohnehin nicht all zu groß und bis zur maximalen 
Größe ist es kein großes Problem. Schöner wäre es trotzdem, wenn es 
einwandfrei funkt :-( Das einzige was er noch hat, ist, dass er immer 
abrundet, aber das macht auch nichts.

lg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren