2013-07-09 2 views
0

Arduino에서 값 목록 (예 : 80,539,345,677)을 내 RPi에서 실행되는 Python 앱으로 보냅니다. 나는 값을 추출하고 앱의 각 변수 나 객체에 값을 할당하는 데 성공하지 못했습니다.직렬 arduino에서 Python으로받은 정수 문자열을 읽는 방법

def read_values(): 
    #if DEBUG: 
    print "reading arduino data" 
    ser = serial.Serial('/dev/ttyUSB0', 9600) 
    print "receiving arduino data" 
    ser_line = ser.readline() 
    print ser_line 
    ser.close() 
    ser_list = [int(x) for x in ser_line.split(',')] 

    ambientLight = ser_list[1] 

    print ambientLight 

    return ambientLight 

내가 파이썬에서 받고 있어요 것은 :

여기 내 코드의

reading arduino data 
receiving arduino data 
80,477,82,2 

Traceback (most recent call last): 
    File "serialXivelyTest4c.py", line 77, in <module> 
run() 

File "serialXivelyTest4c.py", line 63, in run 
ambientLight = read_values() 
    File "serialXivelyTest4c.py", line 27, in read_values 
ser_list = [int(x) for x in ser_line.split(',')] 
ValueError: invalid literal for int() with base 10: '8254\r80' 

당신은 내가 값을 받고 있어요,하지만 그들은 잘립니다되고있는 것을 볼 수 있습니다. 아무도 내가 여기서 잘못 가고있는 것을 말해 줄 수 있습니까? 정말 고마워.

답변

0

나는 Arduino를 사용한 적이 없지만 다른 보드의 시리얼에서 읽는 방법은 다음과 같습니다. 나는 연재물을 사용했다. 빠른 응답

import serial 

def connectPort(portname): 
    # connect to serial port 
    ser = serial.Serial() 
    ser.port = portname 
    ser.baudrate = 9600 
    ser.parity = serial.PARITY_NONE 
    ser.stopbits = serial.STOPBITS_ONE 
    ser.bytesize = serial.EIGHTBITS 
    ser.timeout = 15   # need some value for timeout so the read will end 

    try: 
     ser.open() 
    except serial.SerialException: 
     sys.stderr.write("Could not open serial port %s\n" % (ser.name)) 
     sys.exit(1) 

    return (ser) 
+0

감사 :

import streamUtils as su # see below ser = su.connectPort("/dev/tty.SLAB_USBtoUART") # make sure you have the right port name data = "" while True: try: data = data + ser.read(1) # read one, blocking time.sleep(1) # give it time to put more in waiting n = ser.inWaiting() # look if there is more if n: data = data + ser.read(n) # get as much as possible # I needed to save the data until I had complete # output. if data: # make sure you have the whole line and format else: break except serial.SerialException: sys.stderr.write("Waiting for %s to be available" % (ser.name)) sys.exit(1) sys.stderr.write("Closing port\n") ser.close() 

다음은 streamUtils.connectPort()입니다. PySerial을 사용하고 있으므로 예제가 제대로 작동하지 않을 것이라고 생각합니다. 또한,이 값을 구문 분석과 함께 더 많은 문제가 될 것으로 보인다. – RoboArch

+0

@RoboArch - readline이 모든 것을 얻고 있습니까? 나는 비슷한 방식으로 내가 읽었던 방식으로 읽는 이유 중 하나이다. 내가 포맷하기 전에 모든 정보를 가지고 있는지 확인해야했습니다. – Crystal

+0

아니, 내가 다 알아들을 지 모르겠다. 거의 그대로 코드를 사용했지만 streamUtils를 사용할 수 없습니다. 시리얼을 사용하면 try : 문에서 앱을 정지시킬 수 있습니다. – RoboArch

관련 문제