Forum: Mikrocontroller und Digitale Elektronik Modulo Hilfe


von Rebi (Gast)


Lesenswert?

1
void TEMPsetzen(unsigned char TempLow,unsigned char TempHigh)
2
{  
3
  int Temperatur = TempLow + (TempHigh<<8);    //Temperatur übergeben
4
  Temperatur = (Temperatur / 1.28 + 0.5);      //Temperatur wandeln und runden
5
  char stringa[30];      //30 zeichen zur verfügung
6
  sprintf(stringa, "Temp = %+3i.%2i C", Temperatur/100,Temperatur%100);    //Temperatur ausgeben
7
  lcd_setcursor(0,2);        //Zu richtigem Absatz wechseln
8
  lcd_string(stringa);
9
}

Wenn ich eine Temperatur von z.B 27.88 bekomme funktioniert es.
Wenn die Temperatur jedoch 26.07 ist, wird 26.7 Angezeigt. Was mir auch 
noch logisch erscheint denn 2607/100  = 26 Rest 7

Meine Frage wie krieg ich das hin das mir die 0 auch angezeigt wird?

von pitschu (Gast)


Lesenswert?

Wenn du im Formatstring statt %2i einfach %02i schreibst, geht das. Ein 
Tipp noch: Wenn die Temperatur auch negativ werden kann, würde bei -1,6° 
dann -1.-60 angezeigt. Man sollt den Nachkommateil also mit 
abs(Temperatur%100) in das sprintf schicken.

pitschu

von Karl H. (kbuchegg)


Lesenswert?

Rebi schrieb:

> Meine Frage wie krieg ich das hin das mir die 0 auch angezeigt wird?

Indem du sprintf anweist, führende 0-en einzubauen
1
   sprintf(stringa, "Temp = %+3i.%02i C", Temperatur/100,Temperatur%100); 
2
                                  ^
3
                                  |

von Karl H. (kbuchegg)


Lesenswert?

pitschu schrieb:

> Tipp noch: Wenn die Temperatur auch negativ werden kann, würde bei -1,6°
> dann -1.-60 angezeigt. Man sollt den Nachkommateil also mit
> abs(Temperatur%100) in das sprintf schicken.

Da gibt es noch eine Falle:
Ist die Temperatur bsp. -0.5 dann ist der Vorkommanteil gleich 0. 0 ist 
aber immer positiv. D.h die Temperatur würde dann als 0.5 angezeigt.

-> Für negative Werte einen eigenen Fall machen.

von Stefan (Gast)


Lesenswert?

Wenn du die Einer und Zehner anders umwandelst würde es ohne Modulo 
gehen.

2607/100
=>
26.07 umwandeln in int
=>
26 mal 100 (entspricht der Zahl vor dem Komma)
=>
2600
=>
2607-2600 = 07 bzw.7 (stelle hinter dem Komma)

von Rebi (Gast)


Lesenswert?

Danke pitschu und Karl Heinz.
Hätte ich selber drauf kommen müssen funktionert Tip Top!

Das mit den Negativen habe ich gerade Simuliert. Mit abs gibt es bei 
-0.5 leider +0.5 ansonsten stimmen die Ergebnisse. Also werde ich für 
Minus seperat machen so wie von Karl Heinz Empfholen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.