2016-07-11 15 views
1

Ich schreibe etwas Code von einer seriellen Schnittstelle zu lesen und den ganzzahligen Wert der empfangenen Daten zurückzugeben.Konvertieren von Daten der seriellen Schnittstelle in Ganzzahl

Es scheint, dass ich die "\r\n" daraus entfernen muss. Ich habe versucht zu splitten, aber es funktioniert nicht.

Hier ist mein Code:

import time 
import serial 
import string   

ser = serial.Serial(
    port='/dev/ttyACM1', 
    baudrate = 9600, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_ONE, 
    bytesize=serial.EIGHTBITS, 
    timeout=1 
) 
counter = 0 

while 1: 
    x = ser.readline() 

    if "t" in x: 
     print x 
     x = int(x) 
     print x 
     print "temp" 
    elif "h" in x: 
     print "hum " 
    elif "g" in x: 
     print "gas " 
    else: 
     pass 

    time.sleep(1) 

Dann habe ich diesen Fehler:

Traceback (most recent call last): 
    File "/home/pi/read.py", line 26, in <module> 
    x=int(x) 
ValueError: invalid literal for int() with base 10: 't0\r\n' 

Könnte mir jemand helfen?

+3

Sie müssen die Buchstaben entfernen, das 't' ist, was Ihr Problem verursacht – Copperfield

+1

Fehler ist klar - Eingabezeichenfolge kann nicht in int konvertiert werden (da gibt es" t "in Zeichenfolge, wie würden Sie es in int eindeutig konvertieren?) Sie müssen eine Vorverarbeitung für "t" durchführen, bevor Sie versuchen, sie zu konvertieren. Welche Art von Verarbeitung? Ich lass es dich selbst herausfinden. –

Antwort

1

Probieren Sie es wie folgt aus:

import time 
import serial 
import string   

ser = serial.Serial(
    port='/dev/ttyACM1', 
    baudrate = 9600, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_ONE, 
    bytesize=serial.EIGHTBITS, 
    timeout=1 
) 
counter = 0 

while True: 
    line = ser.readline().rstrip() 
    if not line: 
     continue 

    resultType = line[0] 
    data = int(line[1:]) 

    if resultType == 't': 
     print "Temp: {}".format(data) 
    elif resultType == 'h': 
     print "Hum: {}".format(data) 
    elif resultType == 'g': 
     print "Gas: {}".format(data) 
    else: 
     pass 

    time.sleep(1) 

Die erste Änderung str.rstrip() ist die Linie, die wir von der seriellen Schnittstelle zu lesen. Dadurch werden "\r\n" Zeichen oder Leerzeichen am Ende der Zeichenfolge entfernt. Die zweite Änderung besteht darin, die Zeile in den Buchstaben "type" (line[0]) und die Daten (den Rest der Zeile) aufzuteilen.

+0

Traceback (jüngste Aufforderung zuletzt): File "/home/pi/read.py", Zeile 18, in result Zeile = [0] Indexerror: string Index außerhalb des zulässigen Bereichs –

+0

Versuchen Sie jetzt mit meinem bearbeiten. – Will

+0

Es ist immer noch der gleiche Fehler !! –