Bluetoothを介してシリアルポート経由で送信されるデータを読み取り、連続する各パケット間の経過時間を計算できるPythonスクリプトを作成する必要があるコードをデバッグしています.シリアルポートからデータを読み取る方法は知っていますが、各パケット間の時間の計算に問題があります。
どんな提案でも非常に役に立ちます。
ありがとう!
time
Pythonモジュールを使用して時間差を計算してみませんか? より高い精度が必要な場合は、select
システム コールを使用して独自のタイマーを実装できます。
しかし、より良い解決策は、Portmonのようなものを使用することです
このようなものがうまくいくかもしれません。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
これは非常に簡単な答えなので、より複雑な質問をしている場合はそう言ってください。
これは私が書いたもので、うまくいきました。ご回答いただきありがとうございます。
#!/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
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