为什么pyserial暂停python程序

时间:2015-02-21 04:07:46

标签: python pyserial

我在一个非常时间敏感的循环中使用了一些python代码(在raspberry pi上运行)(不应该偏离+ =。0001 s)。我发现了

if serial.Serial('/dev/ttyUSB0').read(): #what to do when there is data pending
    data = serial.Serial('/dev/ttyUSB0').read()

似乎是个问题。我很少通过串行连接发送任何东西,当我这样做时,它不到10个字节。看起来这段代码在收到数据之前就会阻止程序。

例如,如果我收到一个恒定的数据流并打印出每个循环的执行时间,它大约为.1ms,这对我的目的有好处,但是如果我一分钟没有收到任何东西,那么就收到数据,该循环需要60秒才能完成。

如果串口中没有数据等待,我需要一点点代码来跳过运行并且不会占用程序。

以下是可能相关的更完整的代码部分:

raspi=serial.Serial('/dev/ttyUSB0')

    if raspi.read(): #what to do when there is data pending
    print data #this is a messy debugging tool to see what the pi recieves
    data = raspi.read()
    raspi.write(confirmed + data) #this is the data confirmed message
    if((str(data)[0]=='s' or str(data)[0]=='S' or str(data)[0]=='b' or str(data)[0]=='B')): #this is for going straight. Command is s# or b#, # being 1-9.
        lspeed=str(data)[1]
        print('lspeed is now ' + str(lspeed))
        raspi.write('lspeed is now ' + str(lspeed))
        rspeed=str(data)[1]
        print('rspeed is now ' + str(rspeed))
        raspi.write('rspeed is now ' + str(rspeed))
    if(str(data)[0]=='r' or str(data)[0]=='R'):
        rspeed=str(data)[1]
        print('rspeed is now ' + str(rspeed))
        raspi.write('rspeed is now ' + str(rspeed))
    if((str(data)[0]=='l' or str(data)[0]=='L') and str(data)!='launch'):
        lspeed=str(data)[1]
        print('lspeed is now ' + str(lspeed))
        raspi.write('lspeed is now ' + str(lspeed))

1 个答案:

答案 0 :(得分:1)

if serial.Serial('/dev/ttyUSB0').read():替换if(serial.Serial('/dev/ttyUSB0').inWaiting>=1):就可以了。

如果没有数据等待,这种方式会跳过代码。我使用的参考误导了我。