Frage

I'm using Arduino and getting values from my shields and sensors. And also I send some of them to serial.println because of listening port 9600. I'm listening port 9600 and save these values to txt. After that I upload these values to database and use web services.

But I couldn't save the 9600 port in given time. Because if I didn't close the python application, it never close and never save txt file.

My code is below. I want to save txt for every 1 minutes.

How can I do it?

import serial
ser = serial.Serial('/dev/tty.usbmodem1411', 9600, timeout=1)
while 1:
    line = ser.readline()   # read a '\n' terminated line
    line2=line.decode("utf-8")
    ths = open("/Users/macproretina//Desktop/data.txt", "a")
    ths.write(line2)
ser.close()
War es hilfreich?

Lösung

You can use a simple timer to stop the loop. I cleaned up the resource management a bit, context managers are really useful.

import threading
from contextlib import closing
import serial

continue_looping = True
def stopper():
    global continue_looping
    continue_looping = False

timer = threading.Timer(60, stopper)
timer.start()

with open("/Users/macproretina/Desktop/data.txt", 'w') as out_file:
    with closing(serial.Serial('/dev/tty.usbmodem1411', 9600, timeout=1)) as ser:
        while continue_looping:
            line = ser.readline()   # read a '\n' terminated line
            out_file.write(line.decode('utf-8')
            out_file.flush()

It might be off a bit due to serial timeouts. Notice that you get the output written to the file if you call f.flush() in case you need that.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top