2

我正在调试我的代码,我需要为此编写一个 python 脚本,该脚本可以读取通过蓝牙通过串口发送的数据并计算每个连续数据包之间经过的时间。我知道如何从串口读取数据,但我是在计算每个数据包之间的时间时遇到问题。

任何建议都会非常有帮助。

谢谢!

4

4 回答 4

1

像这样的东西可能会奏效。只需创建一个 IntTimer() 对象并在收到数据包时调用 .stamp() 即可。这只是一个开始,所以如果它做你想要的,那么你可能需要改变它来清理旧的邮票等,否则 self.timestamps 只会增长和增长。您可以使用 self.timestamps 计算数据包之间的平均时间等。

import time

class IntTimer:
    def __init__(self):
        self.timestamps = []

    def stamp(self):
        if self.timestamps:
            last = self.timestamps[-1]
        else:
            last = False

        now = time.time()

        self.timestamps.append(now)

        if last:
            #return the time since the last packet
            return now - last  
        else:
            return -1          

这是一个非常简单的答案,所以如果您要问一个更复杂的问题,那就这么说吧。

于 2011-09-20T16:23:37.790 回答
1

为什么不使用 pythontime模块来计算时间差异?select如果您需要更高的精度,您可以使用系统调用实现自己的计时器。

但更好的解决方案是使用Portmon 之类的东西

于 2011-09-20T16:28:19.193 回答
0

我会使用time.time()和减去来查找经过的秒数。

import time

# receive one packet
t0 = time.time()
# then receive the other packet
t1 = time.time()

print 'Time between packets (seconds):', t1 - t0
于 2011-09-20T17:17:01.233 回答
0

所以这就是我写的,它奏效了。谢谢大家的回答。

#!/bin/python

import serial
import time


time_stamp_prev = 0

ser = serial.Serial(  \
    port="/dev/tty.bluetoothmodule", \
    baudrate=115200, \
    parity=serial.PARITY_NONE, \
    stopbits=serial.STOPBITS_ONE, \
    bytesize=serial.EIGHTBITS )

while True:
    if ser.inWaiting() > 0:


    print ser.readline();
            time_stamp_curr = time.time()
            time_between_packets = time_stamp_curr - time_stamp_prev
            time_stamp_prev = time_stamp_curr
于 2011-09-21T03:33:43.897 回答