2017-08-21 6 views
0

私はかなり新しいpythonで、現在は自分のマイクロコントローラからデータを試してみるために使っています。シリアルデータによる文字列エラー

import serial 
import numpy 
import matplotlib.pyplot as plt 
from drawnow import * 

port = serial.Serial('com4',9600) 

while True: 
    while (port.inWaiting()==0): 
     pass 
    sstring = port.readline() 
    dataArray = sstring.split(',') 

    Pterm = float(dataArray[0]) 
    Iterm = float(dataArray[1]) 
    Dterm = float(dataArray[2]) 
    Error = float(dataArray[3]) 

    print Pterm 
    print Iterm 
    print Dterm 
    print Error 
    print 

ここで、いつか問題なくデータを受信します。

Data that was successfully received

しかし、私はメッセージが好き得る他の回。書式文字列で

  • 未認識文字0
  • 'ASCII' コーデックは位置35のバイト0xa9を復号することができない浮いているように文字列を変換できませんでした:序ない範囲で、(128)

マイクロコントローラからシリアルで送信する文字列は、常に上の図のようになりますが、大きさは異なります。

これらのエラーを解決するためにコードを調整したり、スクリプトの実行中にこれらのエラーを無視することはできますか?

+2

実際にマイクロコントローラから受け取ったものを調査する必要があります。単に 'print sstring'を行うのは良いスタートのようです。 – mkrieger1

+0

一般的に、可能な限り速い読み込みでシリアルポートをスラミングすると、ガベージデータが生成されることがあります。これらのケースのそれぞれを処理するだけです。 – csunday95

+1

[例外を処理する](https://docs.python.org/3/tutorial/errors.html#handling-exceptions)、例外スイートでは関連するデータを印刷します。 – wwii

答えて

0

私は自分のコードにデコードメソッドを追加すると、よりうまく動作し始めたようです。

私は助けてくれてありがとう、私は例外処理を含めるようにしてくださいますsstring = port.readline().decode('ascii').strip()

sstring = port.readline()

を変更しました。

関連する問題