How to read a string value with a delimiter on Arduino?

yital9 picture yital9 · Jun 25, 2012 · Viewed 84.4k times · Source

I have to manage servos from a computer.

So I have to send manage messages from computer to Arduino. I need manage the number of servo and the corner. I'm thinking of sendin something like this : "1;130" (first servo and corner 130, delimeter ";").

Are there any better methods to accomplish this?

Here is my this code :

String foo = "";
void setup(){
   Serial.begin(9600);
}

void loop(){
   readSignalFromComp();
}

void readSignalFromComp() {
  if (Serial.available() > 0)
      foo = '';
  while (Serial.available() > 0){
     foo += Serial.read(); 
  }
  if (!foo.equals(""))
    Serial.print(foo);
}

This doesn't work. What's the problem?

Answer

Ihab picture Ihab · Jan 7, 2014
  • You can use Serial.readString() and Serial.readStringUntil() to parse strings from Serial on arduino
  • You can also use Serial.parseInt() to read integer values from serial

Code Example

int x;
String str;

void loop() 
{
    if(Serial.available() > 0)
    {
        str = Serial.readStringUntil('\n');
        x = Serial.parseInt();
    }
}

The value to send over serial would be "my string\n5" and the result would be str = "my string" and x = 5

Note: Serial.available() inherits from the Stream utility class. https://www.arduino.cc/reference/en/language/functions/communication/serial/available/