Take the 2-minute tour ×
Arduino Stack Exchange is a question and answer site for developers of open-source hardware and software that is compatible with Arduino. It's 100% free, no registration required.

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?

share|improve this question

1 Answer 1

up vote 0 down vote accepted

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.

share|improve this answer
    
Yes, just figured that out. Thanks anyway. –  Reygoch Aug 28 '14 at 21:41

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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