2016-04-11 6 views
2

Arduinoを使用して温度を出力しています&センサーからのHumデータ。pySerialを使用してPythonを実行しているPCが読み取ります。データは正しく読み込まれていますが、CR/LFと予期しない文字を削除したいと思います。このサイトで見つけた1つのアイデアは、lstripまたはlreplaceを使うことでしたが、正しく動作していないようです。文字の1つのインスタンスを削除しますが、行を繰り返したり、小さなループを作っても効果はありません。Python(pySerial):文字列からCR、LF、または予期しない文字を削除/削除できません。

これは、どのようなプログラムプリント(私は不要な文字をカットしようとした後にボトムラインが文字列である)である:

[B '\ n' は、B '\ rを\ n' は、B '読み取りセンサー:OK \ r \ n'、b'Hum40.00 \ r \ n '、b'TempC18.00 \ r \ n']

["b'Hum40.00 \ r \ n '" 、 "b'TempC18.00 \ rを\ n 'は]"]

それは読むこと私が目指しています:

[Hum40.00、TempC18.00]

Iメッセージ後できれば微調整することができます。

これはコードです:

import serial as ser 
    import time 

    count = 0 
    msgArray = [] 
    saveMsg = [] 

    ser = ser.Serial('COM16', 9600, timeout=1, parity='N', stopbits=1,        bytesize=8, xonxoff=0) # Setting up and opening COM port 
    ser.close() 
    ser.open() 

    def readSerial():    #reads a whole line from COM port 
     serLine = ser.readline() 
     return serLine 

    def sveMsgCut():    #saves the buffer as a message then cuts message 
     cutMsg = saveMsg 
     words = cutMsg.split(',') 
     return words 

    while True:      #main program 
     dataSerial = readSerial() 

     if count < 5:      #reads COM port 5 times and passes along to buffer msgArray 
      msgArray.append(dataSerial) 
      count = count+1 
     else: 
      print(msgArray)      #~display msgArray 
      saveMsg = str(msgArray)    #convert to string 
      splitMsg = saveMsg.split(',')  #splits string (csv) 
      phrase = splitMsg[3:5]    #cuts out excess either side of Temp & Hum/ 
      phraseString = str(phrase) 
      phraseNew = phraseString.lstrip("/n") #an attempts ot remove CR 

      print(phraseNew)     #~print adjusted string 

      saveMsg = msgArray 
      count = 0  #resets msgArray and counter 
      msgArray = [] 



      time.sleep(5) 

それは私が見逃しているが、いくつかのさまざまなアイデアを試してみましたし、余分な文字を削除することができないというシンプルなものかもしれので、私はプログラミング、特にPythonのにかなり新しいです。

答えて

1

rstrip/lstripがうまくいかない理由がわかりません。

私のマシンで期待どおりにこのコードが実行されます。

s = '\r\nHum40.00\r\n' 
print (s.rstrip().lstrip()) 

私が見る唯一の違いはそれほど代わりにしてみてください「/ N」パラメータです:

phraseNew = phraseString.lstrip() 
+0

クイックフィードバックをいただきありがとうございます。私はあなたの最初の例をCMDで試してみましたが、それは動作することがわかりましたが、プログラムにはまだ効果がありません。私は今、物事を簡素化するために、リストから1つの要素を扱い、湿度の読みをクリアしてみようとしています。 – BackScatter

+0

どのような環境を使用していますか?これはIDEの問題かもしれません。 – lps

+0

私はWindowsでPyCharmを使用しています。 Anacondaもインストールされています。私はCMDプロンプトでもプログラムを実行しようとしましたが、チェックする必要はありますが、同じ応答があったと思います。 – BackScatter

0

はこれについて、別の道を行くことにしました。

else: 
     print(msgArray)      #Raw serial data 
     msgString = str(msgArray)    #convert serial data to str 
     character = list(msgString)   #str to list 

# the next two lines extract the temp & hum readings then converts 
    them to their respective strings 

     humidity = ''.join(character[46:51])  
     temperature = ''.join(character[65:70]) 

print('H:' + (humidity) + ' T:' + (temperature)) 
出力は次のようになり

(生次いで処理されたデータ):

[リストに生シリアルデータを配置した後、温度と湿度測定値を抽出し、文字列として、それらを一緒に参加しましたb '\ n'、b '\ r \ n'、b '読み取りセンサー:OK \ r \ n'、b'Hum40.00 \ r \ n '、b'TempC21.00 \ r \ n']

H:40.00T:21.00

今すぐ次の段階に進みます。