int Umwandlung

OP #2811218
Lesenswert?

Hallo Leute,

ich bin am verzweifeln.

Ich lese mit einem µC int Werte ein. Ein int Wert entspricht einer 
bestimmten Zeit.

Also konkret:

0 entspricht 0.0s
1 entspricht 0.1s
2 entspricht 0.2s usw.

Wie kann ich die int Werte jetzt entsprechend umwandeln, so dass ich sie 
am Ende als char ausgeben kann? Die Ausgabefunktion verlangt als 
Datentyp char.

Vielen Dank für die super Hilfe hier!

Viele Grüße,
#2811237
Lesenswert?

Christoph A. schrieb:
> Hallo Leute,
>
> ich bin am verzweifeln.
>
> Ich lese mit einem µC int Werte ein. Ein int Wert entspricht einer
> bestimmten Zeit.
>
> Also konkret:
>
> 0 entspricht 0.0s
> 1 entspricht 0.1s
> 2 entspricht 0.2s usw.
>
> Wie kann ich die int Werte jetzt entsprechend umwandeln, so dass ich sie
> am Ende als char ausgeben kann?

itoa würde zb gehen.

> Die Ausgabefunktion verlangt als
> Datentyp char.

Du wirst schon erst mal eine Ausgabefunktion brauchen, die Strings 
ausgeben kann.

http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
#2811266
Lesenswert?

Christoph A. schrieb:
> Karl Heinz Buchegger schrieb:
>> Du wirst schon erst mal eine Ausgabefunktion brauchen, die Strings
>> ausgeben kann.
>
> Ok, ich habe gerade nachgesehen. Ein String kann ich auch eingeben. Z.B.
> "test". Das wird aber als char eingelesen

Nö. Nicht als char. Als String.

> und in er Funktion dann in
> einen String umgewandelt. Nur wie bekomme ich jetzt 0.5 in die "__"
> Anführungszeichen?

?
Was jetzt.

Trennen wir erst mal die Dinge.
Eingabe
Ausgabe

Bei welchem Problem stehst du?
#2811271
Lesenswert?

Christoph A. schrieb:
> Nur wie bekomme ich jetzt 0.5 in die "__"
> Anführungszeichen?

Mit der Funktion itoa für int bzw. utoa für unsigned int. Steht doch im 
oben geposteten Link.

Vorher musst Du Deinen Wert natürlich in Vorkomma- und Nachkommastellen 
zerlegen. Das ist aber Mathematik und hat eigentlich nichts mit C zu 
tun.

Dann musst Du Deine Ausgaberoutine 3mal aufrufen. Zuerst die 
Vorkommastellen ausgeben, dann das Dezimaltrennzeichen und dann die 
Nachkommastellen.
OP #2811481
Lesenswert?

Also das ist die Funktion bzw. der Funktionsaufruf:

void LCD_Print(const  char* Text, unsigned char X, unsigned char Y, 
unsigned char FontNr, unsigned char XScale, unsigned char YScale, 
unsigned int ForeColor, unsigned int BackColor)
{...};

Ich hatte gehofft pro Wert (zb 0.3) die Funktion nur einmal aufrufen zu 
müssen.

Karl Heinz Buchegger schrieb:
> Was jetzt.
>
> Trennen wir erst mal die Dinge.
> Eingabe
> Ausgabe
>
> Bei welchem Problem stehst du?

Das Problem habe ich doch oben beschrieben. Ich bekomme in den µC 
unsigned int Werte (0, 1, 2, 3, ... , ). Jeder dieser Werte entspricht 
eine Zeiteinheit in 0.1s Schritten. Also:

0 -> 0
1 -> 0.1
2 -> 0.2
.
.
. usw.

Nun habe ich versucht einfach per Definition jedem int Wert einen 
entsprechenden String "0.3" zuzuweisen. Hat irgendwie nicht geklappt.

Dann wollte ich einfach den eingelesenen Wert erst in eine 
Gleitkommazahl umwandeln und diese dann durch 10 teilen. Den neuen Wert 
dann ausgeben. Aber wie?
Gast #2811513
Lesenswert?

>Dann wollte ich einfach den eingelesenen Wert erst in eine
>Gleitkommazahl umwandeln und diese dann durch 10 teilen. Den neuen Wert
>dann ausgeben. Aber wie?

printf("Wert: %d.%d\n", wert/10, wert%10);
Gast #2811521
Lesenswert?

>>Dann wollte ich einfach den eingelesenen Wert erst in eine
>>Gleitkommazahl umwandeln und diese dann durch 10 teilen. Den neuen Wert
>>dann ausgeben. Aber wie?
>
>printf("Wert: %d.%d\n", wert/10, wert%10);

Ach Blödsinn du hast da ne andere Ausgabe:

char buffer[9];
snprintf(buffer, sizeof(buffer), "%d.%d\n", wert/10, wert%10);
LCD_Print(buffer,...

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