Go Down

Topic: Problem String zu int umzuwandeln (Read 921 times) previous topic - next topic

map1

Hallo,

ich habe leider ein Problem mit ein String zur einer Zahl (int)umzuwanden.
ich bekomme über die Serielle Schnittstelle folgen String z,B „.SV22,12"
(.SVx,y wo x und y ein Wert von 1 bis 768 haben kann)

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

String Zahl1A;
String Zahl2A;
int    Zahl1B = 0;
int      Zahl2B = 0;

// Einlesen von der Serial Schnittstelle
  char character;
  while(Serial.available()) {
      character = Serial.read();
      RX_Read.concat(character);
  }

// Auswertung von der Serial Schnittstelle   
  if (RX_Read != "") {
   if (RX_Read.substring(0,3) == ".SV") {
      Zahl1A = RX_Read.substring(RX_Read.indexOf('V')+1,RX_Read.indexOf(','));
      Zahl2A = RX_Read.substring(RX_Read.indexOf(',')+1);
      }


Bei "sscanf(Zahl1A,"%d",&Zahl1B);" bekomme ich die Fehler Meldung

error: cannot convert 'String' to 'const char*' for argument '1' to 'int sscanf(const char*, const char*, ...)'

das gleiche bekomme ich auch mit "Zahl1B = atoi(Zahl1A);"

error: cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)'


Wenn ich mir den String ausgeben lasse mit
  printlm("Zahl 1 ist : " + Zahl1A);
  println("Zahl 2 ist : " + Zahl2A);
bekomme ich auch "Zahl 1 ist : 22" und "Zahl 2 ist : 12" ausgegeben 

aber ich schaffe es nicht die Strings in zahlen umzuwandeln.

Über eine hilfe würde ich mich sehr freuen,
Vielen Dank auch im Voraus.

circuit99

Ich würde mir überlegen ob ich überhaut die ganzen String-Funktionalitäten nutzen  würde. Das braucht sicher viel Ressourcen und die String-Klasse hat glaube auch ein paar Bugs. Ließ doch einfach Zeichen für Zeichen ein. Die ersten drei kannst du verwerfen. Dann machst du eine while-Schleife bis das Komma kommt:

while(character != ','){
  Zahl1 = Zahl1*10+int(character);
  character = Serial.read();
}

Dann brauchst du nur noch die zweite Zahl einlesen. Wenn du noch ein paar ifs und whiles drumrum bastelst sollte es ganz gut funktionieren.

Udo Klein

Ich würde den String gar nicht erst einlesen sondern direkt beim Empfang umwandel. Z.B. so: http://blog.blinkenlight.net/experiments/measurements/flexible-sweep/.
Check out my experiments http://blog.blinkenlight.net

Go Up