获取某段时间的Com Port串口读数
Getting a Com Port serial reading in a certain period of time
我正在迈出 Python 编程的第一步。我正在使用通过 USB 转 TTL 串行连接连接到 Windows 7 计算机的 TFMini Plus 激光雷达。
我正在通过此代码获取读数:
import time
import serial
import datetime
import struct
import matplotlib.pyplot as plt
ser = serial.Serial(
port="COM1",
baudrate = 115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
while 1:
x = ser.readline().decode("utf_8").rstrip('\n\r')
y=float(x)
print(y)
#time.sleep(0.1)
if y > 3:
print("too far!")
我想每 X 秒读取一次(可以根据用户选择设置),但我找不到实现它的方法。当我使用 time.sleep() 时,读数都一样:
Readings with time.sleep on
基本上我想延迟读数的频率,或者让它有选择地给我一个捕获的读数。我该怎么做?
谢谢
您可以使用 schedule
包。即:
import time
import serial
import schedule
ser = serial.Serial(
port="COM1",
baudrate = 115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
def read_serial_port():
x = ser.readline().decode("utf_8").rstrip('\n\r')
y=float(x)
print(y)
if y > 3:
print("too far!")
rate_in_seconds = 10
schedule.every(rate_in_seconds).seconds.do(read_serial_port)
while True:
schedule.run_pending()
time.sleep(1)
我正在迈出 Python 编程的第一步。我正在使用通过 USB 转 TTL 串行连接连接到 Windows 7 计算机的 TFMini Plus 激光雷达。
我正在通过此代码获取读数:
import time
import serial
import datetime
import struct
import matplotlib.pyplot as plt
ser = serial.Serial(
port="COM1",
baudrate = 115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
while 1:
x = ser.readline().decode("utf_8").rstrip('\n\r')
y=float(x)
print(y)
#time.sleep(0.1)
if y > 3:
print("too far!")
我想每 X 秒读取一次(可以根据用户选择设置),但我找不到实现它的方法。当我使用 time.sleep() 时,读数都一样:
Readings with time.sleep on
基本上我想延迟读数的频率,或者让它有选择地给我一个捕获的读数。我该怎么做?
谢谢
您可以使用 schedule
包。即:
import time
import serial
import schedule
ser = serial.Serial(
port="COM1",
baudrate = 115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
def read_serial_port():
x = ser.readline().decode("utf_8").rstrip('\n\r')
y=float(x)
print(y)
if y > 3:
print("too far!")
rate_in_seconds = 10
schedule.every(rate_in_seconds).seconds.do(read_serial_port)
while True:
schedule.run_pending()
time.sleep(1)