Pages: [1]   Go Down
Author Topic: Problem String zu int umzuwandeln  (Read 833 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Online Online
Faraday Member
**
Karma: 24
Posts: 3500
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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/.
Logged

Check out my experiments http://blog.blinkenlight.net

Pages: [1]   Go Up
Jump to: