2

I want to send text over serial monitor to Arduino and make Arduino return that string back to me over serial monitor.

I have made this function which reads from serial input and returns a string object.

String readSerial() {
    String input;
    while(Serial.available() > 0)
        input.concat(Serial.read());
    return input;
}

In the loop() I have:

if(Serial.available()) Serial.print(readSerial());

If I just do something like Serial.print("Hello world!"); everything is fine. But, if I try to return string object I get lot's of numbers.

I guess Serial.print doesn't know how to read String object and returns ASCII codes of characters or something?

[update] I have checked it, and it's indeed outputing ASCII codes. For Hi I get 72105.

[update] I have updated my readSerial function to use this :

input += (char)Serial.read();

But now I'm getting carriage return and new line after every character:

[SEND] Hi
H(CR)
i(CR)

So, how can I make it return my text so that is readable?

2 Answers 2

1

String.concat() takes a String as the second argument. Serial.read() returns an int. The compiler creates code that converts the int into a String similar to this:

input.concat(String(Serial.read()));

This is not what you want.

Let's tell the compiler what you really want instead:

input.concat((char)Serial.read());

This will tell the compiler to do the following:

input.concat(String((char)Serial.read()));

We are now having the compiler call the correct String constructor, and the code will work as we expect.

1
  • Yes, just figured that out. Thanks anyway.
    – Reygoch
    Aug 28, 2014 at 21:41
0

Answering the other part of the question:

  • you're getting CRs because your readString is just wrong.

The problem is that you don't wait for receiving a whole line of string. For example, if you press H on the serial monitor, then it is getting received and echoed back as if it would been the whole input, ending with a new line.

You might wish to check my answer at Get strings from Serial.read() that is use https://www.arduino.cc/en/Serial/ReadStringUntil which reads you the whole string until a separator (for example the whole string until it ends with a CR when you press Enter on the serial monitor).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.