私はモーターのために妥当なRPMを得ようとしています。私はそれを通過するスリットを検出すると0または1を送信するフォトインタラプタを持っています。私のコードは次のようなものです。私が必要とするのは、0〜60秒の時間を計測し、1が検出された回数を加算し、60で割り算することです。Pythonのカウントダウンタイマー(モーターRPM用ラズベリーパイ)
私は自分のコードを複雑にしたくありません。また、これは多くの他のスクリプトとWebサーバが背後にあるラズベリーパイで実行されていることに注意してください。だから、 "スリープ"のような悪いコードではなく、CPU全体を奪うだろう。
私は狂った正確な測定を探しているわけではありません。モーターがどのくらい速く回転しているかについての合理的な考え方です。スリットのサイズも違いますか?私は、Pythonを使用してRPIをプログラムしたことがない、これは私がこの仕事に取り組むことを試みる方法で予約して
import RPi.GPIO as GPIO
import time
signal = 21
from time import sleep # this lets us have a time delay (see line 15)
GPIO.setmode(GPIO.BCM) # set up BCM GPIO numbering
GPIO.setup(signal, GPIO.IN) # set GPIO21 as input (signal)
GPIO.add_event_detect(signal,GPIO.BOTH)
try:
while True: # this will carry on until you hit CTRL+C
if GPIO.event_detected(signal): # if port 21 == 1
print "Port 21 is 1/HIGH/True - LED ON"
slit=slit+1 # Counts every time slit passes
else:
print "Port 21 is 0/LOW/False - LED OFF"
rpm = slit/60 # Calculates the RPM
sleep(0.0001) # wait 0.0001 seconds
finally: # this block will run no matter how the try block exits
GPIO.cleanup() # clean up after yourself
「スリープ」は、CPUをホッギングするのと反対です。それは他のタスクのために解放します。だから、それは 'sleep'を使う良い解決策になるでしょうが、あなたはちょうど60秒の睡眠を取ることは確かではありません。もう少し時間がかかる可能性がありますので、より正確な値が必要な場合は、タイムスタンプを取得してオフセットを修正するようにしてください。 – JohanL
@JohanLありがとうございます。しかし、どうすれば実装できますか? –