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
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.
-
Yes, just figured that out. Thanks anyway.Reygoch– Reygoch2014年08月28日 21:41:43 +00:00Commented Aug 28, 2014 at 21:41
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).