0

値をシリアルポート (USB) に継続的にダンプし続ける arduino ボードがあります。このデータは、pySerial ライブラリを使用する python スクリプトを使用して、マシンによって読み込まれます。私が使用したコードは次のとおりです。

import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)

while True:
        ser.flushInput() #Clear the serial input buffer
        print "Value:"
        print ser.readline()
        print ser.readline()
        print ser.readline()

        time.sleep(30) #Wait for 30 seconds

これは完全に機能し、次の出力が得られます。

Value:

162

162

162

Value:

162

162

162

しかし、ループで 30 秒よりもはるかに大きな遅延を与える場合は、1 分以上と言います。

time.sleep(60) #Wait for 60 seconds

問題が発生し始めます。値の最初のセットが出力されています。それ以降、ser.readline() は常にタイムアウトになり、null 値が返されます!

出力:

Value:
162

162

162

Value:



Value:

シリアル モジュールがこの動作を示すのはなぜですか?

最初にシリアル値を読み取るために使用したマシンは、Raspian Linux を実行する Raspberry Pi ボードでした。この問題は、アイドル期間が発生したときに RPi が USB を低電力スリープに延期したことが原因である可能性があると考えました。しかし、ラップトップで同じコードをテストしたところ、同じ問題があり、他の問題である可能性があります.

24 時間 365 日稼働し、特定のイベントの発生時にシリアル値を読み取る必要があるシステムを構築したかったため、この動作は受け入れられません。

この問題に光を当ててください。

4

1 に答える 1

0

次のようなものを読むことができます。

print ser.read(ser.inWaiting())

またはタイムアウトになるまでser.readline()待つ必要があるものを使用しているようですが、試してみると、同じように印刷されるはずです(受信しているものがその間にある限り)\nser.read()\n

今、あなたはcontinuously transmittingそれがどのくらいの頻度だと言いますか?. readline がタイムアウトした場合に、入ってくるデータを見逃す可能性がある方法があるかどうか疑問に思っています。

于 2013-10-30T18:06:55.810 に答える