While trying to help someone else I discovered that the Parse example in Reply #1 will only work once on the same data because the strtok() function changes the array it is working on. In this case it replaces the commas with \0.
The following slightly modified version uses a temporary copy of the array for parsing.
// simple parse demo with repeating output
char receivedChars[] = "This is a test, 1234, 45.3" ;
char tempChars[32]; // temporary array for use by strtok() function
char messageFromPC[32] = {0};
int integerFromPC = 0;
float floatFromPC = 0.0;
char recvChar;
char endMarker = '>';
boolean newData = false;
byte dLen = 0;
void setup() {
Serial.begin(9600);
Serial.println("<Arduino is ready>");
}
void loop() {
// this is necessary because strtok() alters the array
// in this case replacing commas with \0
strcpy(tempChars, receivedChars);
parseData();
showParsedData();
delay(2000);
}
void parseData() {
// split the data into its parts
char * strtokIndx; // this is used by strtok() as an index
strtokIndx = strtok(tempChars,","); // get the first part - the string
strcpy(messageFromPC, strtokIndx); // copy it to messageFromPC
strtokIndx = strtok(NULL, ","); // this continues where the previous call left off
integerFromPC = atoi(strtokIndx); // convert this part to an integer
strtokIndx = strtok(NULL, ",");
floatFromPC = atof(strtokIndx); // convert this part to a float
}
void showParsedData() {
Serial.print("Message ");
Serial.println(messageFromPC);
Serial.print("Integer ");
Serial.println(integerFromPC);
Serial.print("Float ");
Serial.println(floatFromPC);
}
...R