2

this is my first question in this forum.

I need to receive a string from the Arduino serial monitor and display it when the communication is over. I have a similar problem like the one discussed in this thread:

https://electronics.stackexchange.com/questions/45543/how-do-i-receive-an-entire-string-as-opposed-to-1-character-at-a-time-on-the-ard

Only I'm using the Arduino serial monitor instead of a RaspberryPi to send strings so I can't program the sender to attach an identifier like '\n' at the end of the string.

char inData[20];
char inChar=-1;
byte index = 0;

while (Serial.available() > 0){
  ending[1]=ending[1]+1;
  if(index < 19){

      inChar = Serial.read();
      inData[index] = inChar;
      index++;
      inData[index] = '\0';
      Serial.flush();   
  }
  Serial.print(inData);Serial.print("\t");Serial.println();
}

What I receive in the console looks like this:

M
Me  
Mes 
Mess    
Messa   
Messag
Message

I need to display only the final string

Message

The code has to know when the incoming string ended and then display it once.

I'd really appreciate any help I can get.

  • 1
    You have two options. The most reliable is to decide that a particular character will serve as an end-of-message indicator. \n is a common choice, but you can choose whatever you are not going to use in the message itself. The other option is to have a timeout: if no further characters have been received for XXX ms, then assume the message is complete. – Edgar Bonet Nov 6 '16 at 17:42
1

If you really want a string. Try using Serial.readString(). It will return the full string.

The code could look like this:

if(Serial.available()
{
  string message = Serial.readString();
  Serial.println(message);
}
| improve this answer | |
  • It is worth noting that Stream::readString() works with a timeout, which is 1 second by default, but can be changed with setTimeout(). – Edgar Bonet Nov 6 '16 at 19:23
  • Thank you, that's exactly what I needed. Now the output in the serial monitor is the entire text input. First post, first issue solved. I'm really grateful. – Daniel Maydana Nov 7 '16 at 1:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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