Serial debug output looking messy I've got this quite basic code running on an Arduino Mega 2560, and the output is looking like I have the serial settings wrong, though I can't work out what to change.

void setup()  
{
  Serial.begin(9600);
  Serial.println("test123");
}

void loop()
{
  Serial.println("test" + millis());
}


The output looks like this:

ð¦·Z©÷
×ï¾üÿ7ß^|ïüûÿVÏuØëo~ìÿÓûzëýÿ{ßþ©×xñ×¤¿ïßûÏûýoÏ¿îãõI
õfwi÷`p¬½Ïª»QáÀª»¦·ð¦·Z©÷
test123
D



4ñjü¯÷~µÞMz¹Ý~¼
Ûþ}iû}ÒÖ­¦Ç¿÷ÿÂï½Õ¾;îö


I'm using the inbuilt "Serial Monitor" in the Arduino suite with settings 9600 baud and no line endings.

I see that the first println in setup() is sending the data as expected but all other comms are coming through as nonsense.

Any suggestions of what to do?
This is unfortunately not valid in C++:

"test" + millis()


Rather than concatenating two strings, it's actually doing pointer arithmetic. It's taking the memory address where "test" is stored, and offsetting by the value retrieved from millis(). The result is a totally arbitrary memory location which gets treated like a string.

Generally speaking, it's arguably best to avoid string concatenation on Arduino anyway unless absolutely necessary. The reason is that it can use more memory than you might expect.

A simpler approach would simply be to do the serial output as a sequence of individual operations, e.g.:

Serial.print( "test" );
Serial.println( millis() );


Note the difference between print() and println(). The first one doesn't add a line break at the end, but the second one does.