mega2560 Serial reading / writing for external application, spurious characters

Hello everyone!

I am attempting to use Qt to create a GUI for an RGB lighting system. Everything is going pretty well, but I’ve run into trouble with Serial programming. Specifically, I have some spurious characters after the ones I ‘should’ get.

Following the following links as guides, I tried to tackle reading and writing for a Qt using the qextserialport library:

(Arduino / library),20987.0.html
(library API)

My Arduino code is a fairly straightforward “echo”

unsigned long serial_speed = 9600;

void setup() {

void loop() {
      if (Serial.available() > 0) {

My Qt code is maybe a little bit less straightforward, but here are the essentials. Setup (assuming default Serial settings from , no parity bit, one stop, 8 chars ):

MySerialPort QextSerialPort;
void ConnectToPort()
     QString portname = "/dev/tty.usbmodem621"; // or whatever the case may be, 
     MySerialPort = new QextSerialPort(portname, QextSerialPort::EventDriven);


     if (this->MySerialPort->open(QIODevice::ReadWrite) == true) {
// this next line just connects the serial port to a function for handling communication.
// every time Qt thinks we have a character, the function gets called
         connect(MySerialPort, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
     else {
 // error handling code here, not important to my issue

The code for sending:

void SendRGB(void)
    if (!MySerialPort->isOpen()) { ConnectToPort();}
    if (!MySerialPort->isWritable()) { qDebug("Could not write!"); }
    int NumColors = 3;
    char rgb[NumColors] =  {76 , 34 , 77}; // values are unimportant, just for debugging
    printf("Writing:[ ");
    for(int i=0; i < NumColors; i++)
        printf(" %d ",rgb[i]);
        MySerialPort->write(&(rgb[i]),1); // write a single character
    printf(" ] \n");
    MySerialPort->flush(); // wait for all the characters to get to the port

Finally, the reading code:

void onReadyRead()
    QByteArray result;
    unsigned int numExpected = WidgetRGB::NumColors;
    unsigned int bytesAvailable = this->MySerialPort->bytesAvailable();
    if (bytesAvailable < numExpected) { return; }
    this->MySerialPort->read(, bytesAvailable);
    printf("\t Read: [%d]: ",bytesAvailable);
    for (unsigned int j=0; j< bytesAvailable; j++)
        printf("[%d], ", (unsigned char)[j]);

The problem is the output:

Writing:[ 76 34 77 ] // this is good!
Read: [3]: [76], [34], [77], // hurrah! We got them back!
Read: [3]: [10], [96], [206], // wait, what?
Read: [3]: [191], [95], [255], // noooooooo!

I did a little looking at an ASCII table ( ) – the only one I cam make sense of is the ‘10’, which is a Line feed. Pretty unclear what the rest are. Here are some things I tried:

  • Changing the Baud Rate
  • Adding different timeouts and waits
  • … but nothing helped!

My question is really two part (1) Are these spurious characters intended? I suppose I could look into the Serial source code, but it doesn’t seem like others are having difficulties on the net. (2) Are there any (elegant) ways around this? I know I could just ‘assume’ I only need 3 characters, and just gobble up the remaining, but that seems pretty tacky.

Sorry for the length! Happy to address any questions. Note that I heavily simplified the Qt code to make it easier for you all!

It's possible you have collisions happening.

Try reading all serial bytes into a buffer and then echoing them back once Serial.available() == 0;