1
votes

I am working with an Arduino and making a small GUI to communicate with it on Processing. I am just printing out float values onto the serial port and reading it back using Processing. In most cases everything goes well and I am able to read the values. However, sometimes the serial read spits out fairly arbitrary values and I am not sure why. For example,

My Arduino code:

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  for (int i =1;i<5;i++)
{  Serial.println(float(i)+2.0);
delay(1);
  // put your main code here, to run repeatedly:
}
}

The output according to the Serial monitor is 3.0,4.0,5.0,6.0 as expected.

Here's the processing code (Python Mode) that I use to read the data in

def connect2Arduino(): 
    global arduinoPort
    arduinoPort= Serial(this, 'COM32',9600)

def setup():
   background(0)
   connect2Arduino()

def draw():
   global arduinoPort
   if arduinoPort.available()>0:
       dataIn = arduinoPort.readStringUntil(int(10))
       if (dataIn != None or int(dataIn) != 13):
           print dataIn  

The output from processing looks like this

4.00

5.00

6.00

3.00

4.00

5.‚j

6.°3.00

4.00

5.00

6.00

When I try to change the type of dataIn, an error pops up when output is 5.‚j which is as expected.

First of, I have no idea why these errors exist. I would like to know why it's showing up in the first place. Secondly, what's a fix? I could go print instead of println on my arduino code and maybe fix it, but I am looking for something better.

Thank you

1

1 Answers

0
votes

You may be filling the serial buffer. Try checking the value returned by println and verify the correct number of bytes have been processed. You can also try adding a Serial.flush() call after each print to ensure the data has been sent out.