www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Char Array in Integer wandeln für If Schleife


Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
if (temp_akt > 25)
   PORTA = 0x80
else
   PORTA = 0x00

Jemand ein Tipp wie ich dieses Problem sonstwie lösen könnte?!
Sprache ist MicroC.

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einem Char 23.5 also steht da 235 ? ansonsten wäre es ja float.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was spricht gegen atoi?
#include <stdlib.h>

int main()
{
  char tmp[] = "23.5";
  int i;

  i = atoi( tmp );
}

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.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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_ka...

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man, danke Karl Heinz :D

Manchmal liegt das gute viel zu nah!

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wegen des Titels: http://www.if-schleife.de/

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-.- 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!
     int temp_select = 1;

...

     if (Button(&PINC, 0, 1, 1) && temp_select == 1) {
        Lcd_Out(2,3,"*");
        Lcd_Out(2,6," ");
        temp_select = 2;
     }

     if (Button(&PINC, 0, 1, 1) && temp_select == 2) {
        Lcd_Out(2,3," ");
        Lcd_Out(2,6,"*");
        temp_select = 3;
     }

     if (Button(&PINC, 0, 1, 1) && temp_select == 3) {
        Lcd_Out(2,3," ");
        Lcd_Out(2,6," ");
        temp_select = 1;
     }

...


Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.