【发布时间】:2015-04-07 17:57:48
【问题描述】:
我编写了一个系统来在 arduino nano 和我的 python 脚本之间交换经过 crc 检查的结构数据。这工作得很好,但是当我让系统运行时,我的 python 监视器上出现了意外的输出(使用 pycharm)
print "Took", (time.time() - timeout), "s" 有时会打印出 Take 0.0 s。 通常它会打印 Take 0.0160000324249 s。 使用win7-64bit专业版。
From time doc : 以浮点数的形式返回自纪元以来的时间(以秒为单位)。请注意,尽管时间总是以浮点数形式返回,但并非所有系统都提供比 1 秒更好的精度。
我正在寻找类似millis() 的东西,这对我的情况来说足够精确
代码 Python:
import serial
import time
import binascii
import struct
from ctypes import *
arduino = serial.Serial()
def receive_struct2():
start = 0x85
detected_start = False
arduino.baudrate = 57600
arduino.timeout = 0
arduino.port = 'COM8'
try:
arduino.open()
except serial.SerialException, e:
print e
while True:
if(arduino.inWaiting() >= 1 and detected_start == False):
data = ord(arduino.read())
if data == start:
print "Detected begin"
detected_start = True
else: print chr(data),
if arduino.inWaiting() >= 1 and detected_start == True:
message_length = ord(arduino.read())
#print "Got message length ", message_length
timeout = time.time()
while time.time() - timeout <= 0.3 and arduino.inWaiting() < message_length-1:pass
print "Took ", (time.time() - timeout), " s"
....
【问题讨论】:
-
不相关:应该有一种方法可以在没有繁忙循环的情况下等待 I/O(
select()Windows 上的模拟)检查 aurdino API 文档。实现繁忙循环的更好方法是使用截止日期:deadline = timer() + 0.3; while timer() < deadline and ...。注意:有不同的有用计时器定义:系统范围与进程范围值,已知来源与仅相对值有用,计算睡眠时间和/或子进程中的时间等。例如阅读@987654321 @