2016-04-11 12 views
2

Ich verwende ein Arduino zur Ausgabe Temp & Hum Daten von einem Sensor, wird dies von einem PC mit Python mit Pyther gelesen. Die Daten werden korrekt eingelesen, aber ich möchte die CR/LF und unerwartete Zeichen entfernen. Eine Idee, die ich auf dieser Seite fand, war die Verwendung von lstrip oder lreplace, aber sie scheinen nicht richtig zu funktionieren. Sie entfernen eine Instanz des Zeichens, aber selbst das Wiederholen der Zeile oder das Erstellen einer kleinen Schleife hat keine Auswirkungen.Python (pySerial): kann CR, LF oder unerwartete Zeichen aus der Zeichenfolge nicht trimmen/entfernen

Dies ist, was das Programm-Drucke (Bottom line String ist, nachdem ich versucht habe, die nicht benötigten Zeichen auszuschneiden):

[b '\ n', b '\ r \ n', b 'Sensor lesen: OK \ r \ n', b'Hum40.00 \ r \ n ', b'TempC18.00 \ r \ n']

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

ich das Ziel bin darauf zu lesen:

[Hum40.00, TempC18.00]

Ich kann die Nachricht hoffentlich später fein abstimmen.

Dies ist der Code:

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) 

ich Programmierung recht neu bin, vor allem Python, so dass es einfach etwas sein kann, dass ich verpasst habe, aber haben verschiedene Ideen ausprobiert und die zusätzlichen Zeichen nicht entfernen können.

Antwort

1

nicht sicher, warum rstrip/lstrip nicht für Sie arbeiten.

dieser Code ausgeführt wird, wie auf meinem Rechner zu erwarten:

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

Der einzige Unterschied, den ich sehe, ist die "/ n" Parameter so stattdessen versuchen:

phraseNew = phraseString.lstrip() 
+0

Danke für die schnelle Rückmeldung. Ich habe Ihr erstes Beispiel mit CMD versucht und kann sehen, dass es funktioniert, aber es hat immer noch keine Wirkung im Programm. Ich habe es mit einem Element aus der Liste zu tun, um die Dinge jetzt zu vereinfachen, und versuche, den Feuchtigkeitsgehalt aufzuklären. – BackScatter

+0

Welche Umgebung verwenden Sie? Es könnte ein IDE-Problem sein. – lps

+0

Ich verwende PyCharm unter Windows. Anaconda ist ebenfalls installiert. Ich habe versucht, das Programm auch über die CMD-Eingabeaufforderung auszuführen, ich denke, es hat die gleiche Antwort gegeben, obwohl ich es überprüfen muss. – BackScatter

0

Entschied über diese andere Art und Weise zu gehen . Platziert die rohen seriellen Daten in einer Liste und extrahiert die Temperatur und Luftfeuchtigkeitswerte schlossen sich ihnen dann zusammen als String:

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)) 

Die Ausgabe sieht nun so aus (Raw dann verarbeiteten Daten):

[ b '\ n', b '\ r \ n', b 'Messwertsensor: OK \ r \ n', b'Hum40.00 \ r \ n ', b'TempC21.00 \ r \ n']

H: 40,00 T: 21,00

Jetzt auf die nächste Stufe.

Verwandte Themen