Die Teilung einer durch Trennzeichen getrennte Zeichenfolge von Ganzzahlen

Mein hintergrund ist nicht in C (in Real Studio - ähnlich VB) und ich bin wirklich kämpfen, um split-Komma-getrennter string, seit ich ' m nicht verwendet, um low-level-string-handling.

Ich bin senden von Zeichenfolgen an einem Arduino über serial. Diese Saiten sind die Befehle in einem bestimmten format. Zum Beispiel:

@20,2000,5!
@10,423,0!

'@' ist der header, der angibt, einer neuen Kommando-und '!' ist die abschließende Fußzeile markiert das Ende eines Befehls. Die erste ganze Zahl nach dem '@' ist die Befehls-id und die restlichen ganzen zahlen-Daten (die Anzahl der zahlen übergeben, so können die Daten überall von 0 - 10 Ganzzahlen).

Ich geschrieben habe, eine Skizze, bekommt den Befehl (stripped von dem '@' und '!') und ruft eine Funktion namens handleCommand() wenn ein Befehl zum handhaben. Das problem ist, ich weiß wirklich nicht, wie teilt diesen Befehl zu verarbeiten es!

Hier ist der sketch-code:

String command; //a string to hold the incoming command
boolean commandReceived = false; //whether the command has been received in full

void setup() {
  //put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  //main loop
  handleCommand();
}

void serialEvent(){
  while (Serial.available()) {
  //all we do is construct the incoming command to be handled in the main loop

    //get the incoming byte from the serial stream
    char incomingByte = (char)Serial.read();

    if (incomingByte == '!')
    {
       //marks the end of a command
       commandReceived = true;
       return;
    }
    else if (incomingByte == '@')
    {
       //marks the start of a new command
       command = "";
       commandReceived = false;
       return;
    }
    else
    {
      command += incomingByte;
      return;
    }

  }
}

void handleCommand() {

  if (!commandReceived) return; //no command to handle

  //variables to hold the command id and the command data
  int id;
  int data[9];

  //NOT SURE WHAT TO DO HERE!!

  //flag that we've handled the command 
  commandReceived = false;
}

Sagen, mein PC sendet der Arduino die Zeichenfolge "@20,2000,5!". Meine Skizze endet mit einer String-Variablen (genannt command), enthält "20,2000,5" und die commandRecieved boolean-variable auf True gesetzt, damit die handleCommand() - Funktion aufgerufen wird.

Was ich gerne tun würde: in der (momentan nutzlos) handleCommand() Funktion zuordnen 20, um eine variable namens id und 2000 und 5 auf ein Integer-array namens data ich.e: data[0] = 2000, data[1] = 5 usw.

Hab ich überlesen strtok() und atoi() aber ehrlich gesagt, ich bekomme einfach nicht meinen Kopf um Sie herum und das Konzept von Zeigern. Ich bin sicher, dass mein Arduino-sketch könnte optimiert werden, auch.

  • diese 2 sind eine gute Methode, dies zu tun. Sie könnten auch versuchen, sscanf, wenn es verfügbar
  • Konnte Sie Beispiel-code? Ich habe gekämpft, um kommen mit der C-code in der obigen Skizze. Ich weiß wirklich nicht, wie die beiden Methoden, die ich erwähnt...
InformationsquelleAutor Garry Pettet | 2012-08-11
Schreibe einen Kommentar