1

sleep()我对 Python3 时间函数有疑问。我的设置包括运行 Firmata 固件的 Arduino UNO 和使用 pyfirmata 库运行 python 代码的 PC/笔记本电脑。

我要做的是从值列表(在本例中为 100 个值)模拟写入 PWM 引脚。我还希望它们每 0.001 秒或 1 毫秒输出一次。因此,从技术上讲,0.001 秒/每个中的 100 个值需要大约 0.1 秒才能完成。

然后,当我使用计时器查看需要多长时间时,问题就发生了。当谷歌浏览器在某些网站上打开时,它总共只达到了约 0.1 秒(我知道这看起来很奇怪,但这是真的 100%)。即使我最小化了谷歌浏览器,总时间会持续减慢到 1.6 秒,直到我再次打开 Chrome。

然后我尝试在我的循环中脱掉我time.sleep(0.001)的,然后不管 Chrome 的外观是否正常,它都可以正常工作。

我真的很想了解这种情况的原因和解决方案。也许可以替代time.sleep? 这是我在python中的代码。您可以从 Arduino IDE 加载固件草图。

另请注意,在较高的值下time.sleep(),无论是否打开 Chrome,一切正常。

import pyfirmata
import time
from timeit import default_timer as timer

board = pyfirmata.Arduino("COM4", baudrate = 115200)
pwmPin = board.get_pin('d:5:p') #digital pin 5 pwm mode

my_points = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]

def LoadWaveform():
   rate = 1/1000
   #print (my_points)
   while True:
      start = timer()
      for i in range(len(my_points)):
         pwmPin.write(my_points[i]/300)
         #time.sleep(rate)

      end = timer()
      print ("Total time run: ", end - start)
      time.sleep(1)

LoadWaveform()
4

0 回答 0