Russ960
Russ960

Reputation: 1339

Getting updates from Ardunio with PySerial only every 2 minutes instead of 1 minute

I have an Arduino that reports time (in seconds), voltage, current and joules ever 60 seconds. In the serial monitor like this:

time,voltage,current,joules
60,1.45,0.39,0.57
120,1.45,0.39,1.13
180,1.45,0.39,1.70
240,1.45,0.39,2.26
...

However the following python script I don't get this result:

import serial
ser = serial.Serial('COM5', 9600)
logfile = open("batterytest.log", 'w')
while True:
    if ser.readline() == b'Test Complete!':
        logfile.close()
        exit()
    logfile.write(ser.readline().decode("utf-8"))
    logfile.flush()

Instead I see results every 120 seconds:

time,voltage,current,joules
120,1.13,0.02,0.05
240,1.13,0.02,0.09
360,1.13,0.02,0.14
480,1.13,0.02,0.19
....

Upvotes: 0

Views: 30

Answers (1)

rigidlab
rigidlab

Reputation: 108

Looks like it may miss the in-between data point due to some timing issue. You can try to use putty to see if your arduino in fact output the right data points.

For your PySerial program, I would add a variable "data" to store your serial readline first, then perform your logic on it.

import serial
ser = serial.Serial('COM5', 9600)
logfile = open("batterytest.log", 'w') 
while True:
    data = ser.readline()
    if data == b'Test Complete!':
        logfile.close()
        exit()
    logfile.write(data.decode("utf-8"))
    logfile.flush()

Also, depending on your Arduino output timing, you may consider adding a timeout value for your serial read by:

ser = serial.Serial('COM5', 9600, timeout = 1 )
# Here the time out is 1 second    

Upvotes: 1

Related Questions