0

这是一个非常奇怪的问题,其中一件事似乎对另一件完全不同的事情产生了很大的影响。

我有一个外部设备(通过 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()它搞砸了。

4

1 回答 1

0

在几乎放弃之后,问题得到了解决!

我注意到外部设备发送数据的速度比我的程序接收数据的速度快,在修复这个问题后,它工作了!

魔法!

于 2012-08-21T14:06:40.310 回答