Ich habe eine Temperaturdiode ausgelesen und die Daten in einem Char
gespeichert in folgendem Format "23.5", nun möchte ich dieses Format als
integer haben um sie so einfach mit einem vordefinierten Wert zu
vergleichen zb. 25.
Jedoch bekomme ich die Char nicht ein Integer wert gewandelt mit, auf
die Kommastelle kommt es mir nicht an, nur die ersten beiden sind
wichtig :/ Meine Schleife funktioniert auch nicht wirklich.
1
if(temp_akt>25)
2
PORTA=0x80
3
else
4
PORTA=0x00
Jemand ein Tipp wie ich dieses Problem sonstwie lösen könnte?!
Sprache ist MicroC.
Hi
Vermutlich gibt es so einfache Konvertierung wie z.B.
in Pascal x:=StrToInt("123") nicht. Daher die Frage, auf welchem System?
Im Prinzip geht es auch folgendermaßen:
Eine Zahl als Char ist um 48 größer. Also, der Wert des Bytes - 48
ergibt die Zahl. Nun nur noch die Stelle bewerten, also einer mal eins,
Zehner mal 10 etc. Das ganze dann addieren und du hast den Integerwert.
gruß oldmax
atoi hört mit dem Dezimalpunkt zu wandeln auf. Eigentlich hört es an der
Stelle auf, an der im String nichts mehr kommt, was zu einem int gehören
kann. Bei dir ist das dann eben der '.'
Und kauf dir ein C-Buch.
Was du da daher radebrechtest, geht ja auf keine Kuhhaut.
Karl heinz Buchegger schrieb:
> Und kauf dir ein C-Buch.>> Was du da daher radebrechtest, geht ja auf keine Kuhhaut.
Danke dir :D
Ja werde ich beherzigen, hatte C damals sogar mal sehr gut gekonnt,
hatte auch zwei, drei Taschenbücher über C von M&T... muß ich echt mal
wieder raussuchen. Ist leider alles schon ein paar Jahre her.
Übrigens hat es mit atoi wunderbar geklappt.
Übrigens rückwärts geht es mit itoa leider nicht, MicroC gibt den befehl
leider nicht her :/ Hab es dann mit sprintf gelößt, welches wiederrum
meine Hex auf über 14kb anschwillen ließ. Dies hab ich wiederrum mit
sprinti in den Griff bekommen - zwar nicht schön, aber geht.
Draco schrieb:
> Übrigens rückwärts geht es mit itoa leider nicht, MicroC gibt den befehl> leider nicht her :/ Hab es dann mit sprintf gelößt, welches wiederrum> meine Hex auf über 14kb anschwillen ließ. Dies hab ich wiederrum mit> sprinti in den Griff bekommen - zwar nicht schön, aber geht.http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
-.- Ja sorry :D
Nun hab ich da aber wieder ein blödes Problem was mich ein wenig Nerven
kostet, er übernimmt einfach nicht den Wert für die Variable
temp_select, was mache ich da falsch?! Er springt bei Knopfdruck in die
erste Abfrage, gibt den Stern auch aus, aber überschreibt die Variable
nicht, somit geht er auch nicht in die zweite Abfrage. :/
Es ist ja nun nicht so das ich nicht lernwillig bin :D Deswegen
entschuldige ich mich für generve hier!
Draco schrieb:
> Nun hab ich da aber wieder ein blödes Problem was mich ein wenig Nerven> kostet, er übernimmt einfach nicht den Wert für die Variable> temp_select, was mache ich da falsch?! Er springt bei Knopfdruck in die> erste Abfrage, gibt den Stern auch aus, aber überschreibt die Variable> nicht, somit geht er auch nicht in die zweite Abfrage. :/
Ich bin mir ziemlich sicher, dass temp_select korrekterweise den
richtigen Wert zugewiesen bekommt. Dein Problem muss an einer anderen
Stelle liegen.
Nur kann man das mit einem kurzen Codeausschnitt nicht weiter eingrenzen
In dem oberen Codeschnipsel mit der Schleife fehlen die ";" hinter den
Portzuweisungen, und das untere Konstrukt sollte eigentlich
funktionieren, ich tippe auch mal drauf das der Fehler woanders liegt.
Jep, problem lag woanders. Es war einfach ein Zeitproblem. Mit einem
Delay von ca. 100ms geht es nun reibungslos.
Er rechnet so schnell die Tastenabfrage durch, das man garnicht gesehen
hat das sich da was änderte.