2017-04-04 3 views
0

Ich habe folgendes Problem:Arduino Spaltung erhielt Zeichenfolge in Worten

ich aus den seriellen Port-Daten in folgenden Form erhalten mag: "30,45,33,22 \ n"; Ich möchte die Zeichenfolge durch die Kommas teilen nach Eingabe der \ n'char und setzen Sie jeden Wert in eine int-Array. Das Problem ist, ich versuchte eine Kombination von strtok und sscanf und es wird einfach nicht funktionieren:

#define PARAM_NR 10 
    Timer tt; 
    int i=0; 
    int index=0; 
    bool stringComplete=false; 
    char recString[MAX_LEN]; 
    char buf[20]; 

int commands[PARAM_NR]; 




void serialEv() 
    { 
     char aux; 
     char *token; 
     int i=0; 

     while(Serial.available()) 
     { 
     aux=Serial.read(); 
     if(i!='\n') 
     { 
     recString[i++]=aux; 
     recString[i]='\0'; 

     } 
     if(aux=='\n'); 
     { 

     token=strtok(recString,","); 
     while(token!=NULL) 
     { 
     token=strtok(NULL,","); 
      sscanf(token,"%d",&commands[index]); 
     Serial.println(commands[index]); 
     index++; 
     if(index==PARAM_NR) 
     index=0; 
     break; 
     } 
     } 


     } 
    } 

Beispiel:

Input:

1,1,1 

Output:

Es scheint, es druckt nur 1 auf der ersten Position und 0 auf den anderen. Wenn ich versuche, einen anderen Eingang

ex: Eingang 1:

1,1,1 

Eingang 2

3,4,5 

Ausgang:

1 
    0 
    0 
    0 
    0 
    0 
+0

'i! = '\ N'' das sieht nicht richtig aus. –

Antwort

0

Es funktionierte, nachdem ich die diese 2 Befehle vertauscht :

sscanf(token,"%d",&commands[index]); 
    token=strtok(NULL,","); 

Ich verstehe immer noch nicht, wie strtok funktioniert.

+0

PS Update: Es scheint, es funktioniert nicht, da ich Serial.println (Befehl [Index]); Es werden alle Ziffern in separaten Zeilen gedruckt. Was ist hier falsch? –