2

Bluetoothを介してシリアルポート経由で送信されるデータを読み取り、連続する各パケット間の経過時間を計算できるPythonスクリプトを作成する必要があるコードをデバッグしています.シリアルポートからデータを読み取る方法は知っていますが、各パケット間の時間の計算に問題があります。

どんな提案でも非常に役に立ちます。

ありがとう!

4

4 に答える 4

1

timePythonモジュールを使用して時間差を計算してみませんか? より高い精度が必要な場合は、selectシステム コールを使用して独自のタイマーを実装できます。

しかし、より良い解決策は、Portmonのようなものを使用することです

于 2011-09-20T16:28:19.193 に答える
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 に答える
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 に答える
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 に答える