Python 3 Pyfirmata timesleep issue

时间:2016-11-11 07:13:01

标签: python python-3.x firmata

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

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

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

然后我尝试在循环中取消time.sleep(0.001),然后无论是否出现Chrome,它都能正常工作。

我真的想了解为什么以及这个案例的解决方案。也许是time.sleep的另一种选择?这是我在python中的代码。您可以从Arduino IDE加载firmata草图。

另请注意,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()

0 个答案:

没有答案