我正在使用pyserial通过arduino微控制器从USB端口访问传感器数据。不幸的是,在接收数据点一秒钟后,又丢失了另一秒钟,这对于我的应用程序是不可接受的。 同时,Arduino IDE中的串行监视器显示正在连续发送的数据。 我可以在我的Python代码中解决此问题吗?
import serial
import time
import matplotlib.pyplot as plt
import numpy as np
import os
### Reading the serial port
mylist = []
ArduinoLeonardoSerial = serial.Serial('com3',115200)
time.sleep(2)
timeout = 3 # period for reading serial data
timeout_start = time.time()
while time.time() < timeout_start + timeout:
line = ArduinoLeonardoSerial.readline().strip()
values = line.decode('ascii').split(',')
mylist.append(values)
ArduinoLeonardoSerial.close()
### Data processing
mylist.remove(mylist[0])
mylist.remove(mylist[-1])
accX = [x[0] for x in mylist]
accY = [x[1] for x in mylist]
accZ = [x[2] for x in mylist]
timestamp = [x[3] for x in mylist]
aX = np.asarray(accX, dtype=np.float32)
aY = np.asarray(accY, dtype=np.float32)
aZ = np.asarray(accZ, dtype=np.float32)
ts = np.asarray(timestamp, dtype=np.uint32)
start_timestamp = np.full((len(ts)), ts[0], dtype=np.uint32)
ts_normalized = ts - start_timestamp
ts_normalized的值(以毫秒为单位)如下:
945 947 949 952 954 956 959 961 963 966 969 972 974 976
979 981 983 986 988 2101 2104 2106 2109 2111 2113 2116 2118 2121
因此,约一秒钟的测量数据被切断。
答案 0 :(得分:2)
删除time.sleep(2)。之所以麻烦,是因为不轮询信息,内部缓冲区将溢出并且信息将丢失。