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 に答える