Umwandeln Char zu Integer

Sehr geehrte Community,

leider habe ich ein problem. Ich versuche in meinem Programm ein Char zu Integer umzuwandeln.

Als SMS sende ich hier z.B. 1234 und ich brauche die als ganze in einem Integer die Daten bekomme ich bei der Variable C. Leider Brauche ich diese als ganze damit ich Sie zerteilen kann und umformen kann für mein Display.

#include <GSM.h>
#include <Arduino.h>
#include <SPI.h>
#include <epa20.h>
#include <font_8x16.h>
#include <font_16x32nums.h>

#define PINNUMBER ""

epa20 EPA20;
GSM gsmAccess;
GSM_SMS sms;

char remoteNumber[20];
char c;

void setup() {
  //Seriel initialisieren
  Serial.begin(9600);

  //Display Initialisieren
  EPA20.initialize(10,0,0,0,9,8);
  EPA20.clear();

  //DEBUG
  Serial.println("SMS Empfangssystem");
  //NORMAL
  EPA20.clear();
  EPA20.string(33,54,font_8x16,"Empfangssystem",BLACK,WHITE);
  EPA20.string(48,38,font_8x16,"Startet...",BLACK,WHITE);
  EPA20.update();

  //PIN CHECK
  boolean notConnected = true;
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      //DEBUG
      Serial.println("Nicht verbunden(SIM Karten Fehler/Falsche Pin");
      //NORMAL
      EPA20.clear();
      EPA20.string(25,54,font_8x16,"SIM KARTEN ERROR",BLACK,WHITE);
      EPA20.string(73,38,font_8x16,"ODER",BLACK,WHITE);
      EPA20.string(25,20,font_8x16,"PIN NUMMER ERROR",BLACK,WHITE);
      EPA20.update();
      delay(3000);
      //DEBUG
      Serial.println("Gerät wurde ausgeschaltet");
      //Normal
      EPA20.clear();
      EPA20.string(40,54,font_8x16,"SYSTEM WURDE",BLACK,WHITE);
      EPA20.string(35,38,font_8x16,"AUSGESCHALTEN",BLACK,WHITE);
      EPA20.update();
      delay(999999999999999999999);
    }
  }
  //DEBUG
  Serial.println("GSM Initialisiert");
  Serial.println("Warte auf SMS");
  //Normal
  EPA20.clear();
  EPA20.string(20,38,font_8x16,"GSM Initialisiert",BLACK,WHITE);
  EPA20.update();
  delay(3000);
  EPA20.clear();
  EPA20.string(28,38,font_8x16,"Warte auf Daten",BLACK,WHITE);
  EPA20.update();

}

void loop() {
  if (sms.available())
  {
    Serial.println("Nachricht von:");

    sms.remoteNumber(remoteNumber, 20);
    Serial.println(remoteNumber);

    if(sms.peek()=='#')
    {
      Serial.println("Discarded SMS");
      sms.flush();
    }

  delay(100);
      
    while(c=sms.read())
    Serial.print(c);

  Serial.println("Ende");

  Serial.println("\nEnde der Nachricht");

  sms.flush();
  Serial.println("Nachricht gelöscht");
  }
}

aktuell bekomme ich auch dies unter char im Seriellen raus nur die umformung zu einer integer bekomme ich noch nicht hin.

SMS Empfangssystem
GSM Initialisiert
Warte auf SMS
Nachricht von:
+49************
1234
Ende

Ende der Nachricht
Nachricht gelöscht

Würde mich freuen wenn einer mir helfen könnte :slight_smile:

Suchst du: atoi() ?

Ich habe mich schon mal informiert und hatte dies geschrieben.

int vorkomma, nachkomma;
char c[] = "19.45";
float test;
int ganz;

void setup(){
Serial.begin(9600);
}

void loop(){
test=atof(c);
Serial.println(c);
Serial.println(test);

ganz = test*1000; //Von 19,45 auf 19450
Serial.println(ganz); 

vorkomma = ganz/1000;
nachkomma = ganz%1000;

Serial.println(vorkomma);
Serial.println(nachkomma);
delay(5000);
}

Nur mein Problem ist ich versuche bei c

char c;

und das mag mein programm nicht da ich bei c einen befehl stehen habe zum auslesen der SMS

c=sms.read

Nur mein Problem ist ich versuche bei c

char c;

und das mag mein programm nicht da ich bei c einen befehl stehen habe zum auslesen der SMS

c=sms.read

Du bist sehr unverständlich.

Wenn Du bereits eine Varable hast die c heißt dann nimm einen anderen Namen.
Grüße Uwe

Sorry mein fehler dies habe ich nur zum verständnis programmiert hier sollte c=sms.read(); für c="19.45" stehen in diesem programm

Das ist jetzt das dritte Thema zu der selben Frage, was soll das? :smiling_imp:

raypat:
Sorry mein fehler dies habe ich nur zum verständnis programmiert hier sollte c=sms.read(); für c="19.45" stehen in diesem programm

Immer noch unverständlich. :slight_smile: Da die Fehlermeldung für dich unverständlich ist, schreibst du selbst etwas unverständliches für die eventuellen Helfer.

Du solltest dich mit den berüchtigten "Basics" beschäftigen:

char c = "1234"; // das ist ein char-Array
x = sms.read() ; // liefert ein int zurück.
Wenn man weiss, dass etwas kommt, passt auch ein char x;
Aber ein char ist etwas anderes als ein char-Array.

Hi

Wird die 'Zahl' als einzelne Zeichen empfangen?
Soll daraus eine Zahl 'gemixt' werden?
Wir nehmen die Zahl 1043
Nun gehen wir zurück in die 1.te Klasse - diese Zahl besteht aus:
1 Tausender
0 Hunderter
4 Zehner
3 Einer

Oder:
Ergebnis=0
Ergebnis + Ziffer 1 (hier die 1)
letzte Ziffer? Ja-> fertig
Ergebnis = Ergebnis * 10
Ergebnis + Ziffer 2 (hier 0) --> Ergebnis ist hier 10
letzte Ziffer? Ja-> fertig
Ergebnis = Ergebnis * 10
Ergebnis + Ziffer 3 (hier 4) --> Ergebnis ist hier 104
letzte Ziffer? Ja-> fertig
Ergebnis = Ergebnis * 10
Ergebnis + Ziffer 4 (hier 3) --> Ergebnis ist hier 1043
letzte Ziffer? Ja-> fertig

Nun haben wir mit 8 simplen Berechnungen aus dem Zeichensalat eine Zahl 'generiert'.
Vll. sollte ich noch erwähnen, daß eine '1' den Wert 0x31, oder 49dez hat - man sollte also von dem Ziffernzeichen noch 0x30 (0der 48 dez) abziehen.
Wenn ein - vor der Zahl steht, muß man sich Das merken oder man geht auf signed Zahlen - ich wäre für 'merken'.

Sollte die Zahl länger werden, muß man halt öfter rechnen.
Kommt ein Komma drin vor, muß man sich merken, wie viele Stellen man nach dem Komma noch gerechnet hat, um die Zahl durch die entsprechende Zehnerpotenz zu teilen.
Wird hier dann wohl auf float raus laufen.

MfG