使用plt.draw()时,奇怪地收到传入的串行数据

时间:2012-08-20 20:02:51

标签: python matplotlib serial-port pyserial

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

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

1 个答案:

答案 0 :(得分:0)

在几乎放弃之后,问题已经解决了!

我注意到外部设备发送数据的速度比我的程序收到的速度快,并且在修复之后,它确实有效!

魔术!