【发布时间】:2012-11-02 14:56:37
【问题描述】:
我正在使用 while 循环读取串行数据。但是,我无法控制采样率。
代码本身似乎需要 0.2 秒才能运行,所以我知道我不会比这更快。但我希望能够精确控制采样的速度。
我觉得我可以使用“睡眠”来做到这一点,但问题是循环本身在不同点可能需要更长的时间来读取(具体取决于通过串行数据传输的内容),所以代码必须弥补余额。
例如,假设我想每 1 秒采样一次,并且循环需要 0.2 秒到 0.3 秒的时间来运行。我的代码需要足够聪明才能休眠 0.8 秒(如果循环需要 0.2 秒)或 0.7 秒(如果循环需要 0.3 秒)。
import serial
import csv
import time
#open serial stream
while True:
#read and print a line
sample_value=ser.readline()
sample_time=time.time()-zero
sample_line=str(sample_time)+','+str(sample_value)
outfile.write(sample_line)
print 'time: ',sample_time,', value: ',sample_value
【问题讨论】:
-
在使用 /dev/rtc 作为异步反应器中的触发器之前,我已经做过这种事情。它以与测量时间无关的精确间隔触发。但你也可以只使用 itimer。
标签: python python-2.7 while-loop serial-port pyserial