1

Python3 の時間sleep()関数について質問があります。私のセットアップは、Firmata ファームウェアを実行する Arduino UNO と、pyfirmata ライブラリを使用して Python コードを実行する PC/ラップトップで構成されています。

私がやろうとしているのは、値のリスト (この場合は 100 個の値) から PWM ピンにアナログ書き込みを行うことです。また、0.001 秒または 1 ミリ秒ごとに出力するようにします。したがって、技術的には、各 0.001 秒で 100 個の値が完了するまでに約 0.1 秒かかります。

次に、タイマーを使用して所要時間を確認すると、問題が発生しました。特定の Web サイトで Google Chrome を開いた場合、合計で 0.1 秒しか達成できませんでした (奇妙に思えるかもしれませんが、100% 本当です)。Google Chrome を最小化しても、Chrome を再度開くまで、合計時間は一貫して 1.6 秒まで遅くなりました。

次に、ループ内で離陸しようとしたところ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()
4

0 に答える 0