Bhakta Nall
Bhakta Nall

Reputation: 194

pySerial writes to Arduino Uno get buffered

I have a Python script that writes short messages to the serial port on my Arduino Uno board using pySerial. There is a loop and depending on some conditions, multiple writes can happen within a loop, something like this:

while True:
    #Conditions block 1
    if <CONDITION1>:
        serial.writelines("INIT")
    elif <CONDITION2>:
        serial.writelines("NEW")
    ...

    #Conditions block 2
    if <CONDITION1>:
        # Fetch something from the Internet
        serial.writelines("CHECK")
    elif <CONDITION2>:
        # Fetch something from the Internet
        serial.writelines("STOP")
    ...

But, when my Arduino board receives this it receives the first message as INIT, but the second one is being read as INITSTOP or INITCHECK and third one gets concatenated to the previous messages. My arduino program checks for specific message in this way:

if(msg.equals("CHECK")) {
    // Do something
}
else if(msg.equals("INIT")) {
    // Do Something else
}

Can anyone guide me on this? BTW, I don't think the problem is with the Arduino as it works perfectly when I test it with the Serial Monitor available with the IDE.

I've tried adding sleeps of upto 10 seconds before every write, but that did not work out.

Upvotes: 0

Views: 3301

Answers (1)

Keith
Keith

Reputation: 43024

Try this this instead:

serial.write("INIT\r")

The writelines probably takes a list (but I can't check it now).

Upvotes: 1

Related Questions