Pergunta

Estou usando o Pyseial para me comunicar com um dispositivo incorporado.

ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
z = ser.readline(eol='\n')

Por isso, enviamos CMD para o dispositivo e ele responde com uma série de comprimento de varejamento terminando em um '\n'

Se o dispositivo não puder reproduzir, então readline() Times e z=''

Se o dispositivo for interrompido ou falhas, estará enviando os dados, então readline() Times e z serão uma corda sem um '\n' no final.

Existe uma boa maneira de verificar se readline() Executou o tempo além de verificar o estado de z.

Foi útil?

Solução

Eu acho que o que você gostaria de fazer é ..

import re
import time
import serial

def doRead(ser,term):
    matcher = re.compile(term)    #gives you the ability to search for anything
    tic     = time.time()
    buff    = ser.read(128)
    # you can use if not ('\n' in buff) too if you don't like re
    while ((time.time() - tic) < tout) and (not matcher.search(buff)):
       buff += ser.read(128)

    return buff

if __name__ == "__main__":
    ser = serial.Serial(PORT, BAUD, timeout = TOUT)
    ser.write(CMD)
    print doRead(ser,term='\n')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top