这是一个非常奇怪的问题,其中一件事似乎对另一件完全不同的事情产生了很大的影响。
我有一个外部设备(通过 COM 端口连接),它不断发送传感器的值(10 位传感器 = 0-1023)。
我正在编写的代码获取这些数据并将其绘制在图表中。
目前底部有一行注释掉(plt.draw()
)。像这样,图表显然没有正确绘制。不过,在这种状态下,来自串口的输入很好,正如您所期望的那样。
当您取消注释该行以允许绘制图表时,问题就出现了。当你这样做时,突然间,输入只是作为一个看似随机的值出现,并没有像预期的那样改变。这个随机值被打印并记录在图表上。
这是代码。
import serial
import matplotlib.pyplot as plt
from collections import deque
size=50
plt.ion()
q=deque([0]*size)
ser=serial.Serial('COM3',57600)
lastbyte=None
line,= plt.plot(range(0,size),list(q))
if ser.isOpen():
while True:
x=ser.readline()
try:
x=int(x)
except ValueError:
x=0
if x!=lastbyte:
print x,
lastbyte=x
q.append(x)
q.popleft()
d=list(q)
plt.axis([size,0,0,1024])
line.set_ydata(d[::-1])
# plt.draw() THIS LINE
ser.close()
plt.ioff()
那么我使用 matplotlib 的方式可能会弄乱输入吗?
我已经用不同的方式广泛地测试了这个来获取和处理数据,但它总是归结为把plt.draw()
它搞砸了。