2017-02-10 2 views
0

Чтение данных из последовательного порта: readline() в приведенном ниже коде возвращает нулевой вектор, данные считывания из последовательного порта - это шестнадцатеричное число, такое как AABB00EF, которое замазка дает мне выход, означает, что сообщение работает, но ничего не работает через питона вот код:Последовательный порт Python, сохраняющий нулевую строку

#!/usr/bin/python 

import serial, time 

ser = serial.Serial() 
ser.port = "/dev/ttyUSB0" 
ser.baudrate = 115200 
#ser.bytesize = serial.EIGHTBITS 
#ser.parity = serial.PARITY_NONE 
#ser.stopbits = serial.STOPBITS_ONE 
#ser.timeout = None   
ser.timeout = 1    
#ser.xonxoff = False  
#ser.rtscts = False  
#ser.dsrdtr = False  
#ser.writeTimeout = 2  
try: 
    ser.open() 
except Exception, e: 
    print "error open serial port: " + str(e) 
    exit() 

if ser.isOpen(): 

    try: 
     #ser.flushInput() 
     #ser.flushOutput() 
     #time.sleep(0.5) 
     # numOfLines = 0 

     # f=open('signature.txt','w+') 

     while True: 
      response = ser.readline() 
      print len(response) 
      #f=ser.write(response) 
      print response 
     # numOfLines = numOfLines + 1 


     f.close() 
     ser.close() 
    except Exception, e1: 
     print "error communicating...: " + str(e1) 

else: 
    print "cannot open serial port " 

ответ

0

Readline будет пытаться читать до конца линии не будет достигнута, если нет \r или \n то он будет ждать вечно (если у вас есть тайм-аут он может работать ...) вместо этого попробуйте что-то вроде этого

ser.setTimeout(1) 
result = ser.read(1000) # read 1000 characters or until our timeout occures, whichever comes first 
print repr(result) 

просто использовать этот код

ser = serial.Serial("/dev/ttyUSB0",115200,timeout=1) 
print "OK OPENED SERIAL:",ser 
time.sleep(1)# if this is arduino ... wait longer time.sleep(5) 
ser.write("\r") # send newline 
time.sleep(0.1) 
print "READ:",repr(ser.read(8)) 

вы можете создать readuntil метод

def read_until(ser,terminator="\n"): 
    resp = "" 
    while not resp.endswith(terminator): 
     tmp = ser.read(1) 
     if not tmp: return resp # timeout occured 
     resp += tmp 
    return resp 

затем просто использовать его как

read_until(ser,"\r") 
+0

все еще получаю ноль – hassan

+0

какие отпечатки? вы даже заходите в ветку if, которую вы ожидаете ... здесь скопируйте этот код точно и скажите мне, что напечатано –

+0

ваш код выше, дайте мне только это ПРОЧИТАТЬ: '' – hassan

Смежные вопросы