おそらく、私はあなたの質問を誤解していますが、それはシリアルラインだとして、あなたはArduinoの順次から送られたすべてのものを読んでする必要があります - あなたが読むまでそれがアルドゥイーノにまでバッファリングされますそれ。
最新のものが表示された状態を表示したい場合は、問題のコード(スリープからマイナス)を組み込んだスレッドを使用して、最後の完全な行をArduinoの最新の行として保存します。
更新:mtasic
のコード例は非常に良いですが、inWaiting()
が呼び出されたときにArduinoのは、部分的ラインを送信した場合、あなたは切り捨て行を取得します。代わりに、最後にの行をlast_received
に置き、部分的な行をbuffer
に入れて、次回のループに追加できるようにします。このような何か:
def receiving(ser):
global last_received
buffer_string = ''
while True:
buffer_string = buffer_string + ser.read(ser.inWaiting())
if '\n' in buffer_string:
lines = buffer_string.split('\n') # Guaranteed to have at least 2 entries
last_received = lines[-2]
#If the Arduino sends lots of empty lines, you'll lose the
#last filled line, so you could make the above statement conditional
#like so: if lines[-2]: last_received = lines[-2]
buffer_string = lines[-1]
readline()
の使用については、「使用している場合
するように注意してください:ここでは、Pyserialのドキュメントは、(少し明確にするためとreadlinesへの言及()で編集)言っているものです読み込まれた行"。 は、 シリアルポートを開くときにタイムアウトを指定します。そうしないと、 という改行文字が受信されなかった場合、いつもブロック をブロックする可能性があります。また、 "readlines()" はタイムアウトでのみ動作します。 はタイムアウトがあることに依存し、 はそれをEOF(ファイルの終わり)として解釈します。
私にとってはかなり妥当だと思われます!
よく受信バッファの内容の合計を読み込みます。私の印象は、arduinoが改行によって送信しているものを区切っているので、おそらく受信バッファーのサイズと一致しないことです。 – JosefAssad
last_receivedにはいつも必要なものがありますか? readlineでそれを行う方法はありますか?あなたの質問 – Greg
のthats。 – mtasic85