水位が一定の値を超えるとモーターが動き水を排出するプログラムを作成したいのですが、期待通りの動作がせず解決の糸口が見つからずここに質問をしました。
解決したい問題は関数releaseの動作が不安定なことです。具体的にはrelease関数は水が一定の水位を超えると割り込み処理として作動するのですが、rmoto及びlmotoの2つの関数を呼び出すとrelease関数が何度も実行されることです。関数が1つの場合は水が一定の水位を超えたことを知らせ、release関数が繰り返されるようなことは起こらないのですが、2つの関数があれば動作が繰り返されてしまいます。
どうすれば、繰り返し関数が動くと言う自体をさけられるのでしょうか?
駄文すみません。
回答よろしくお願いします。
python
1# -*- coding: utf-8 -*- 2import RPi.GPIO as GPIO 3import time 4 5 6#ピン設定 7def config(): 8 GPIO.setwarnings(False) 9 GPIO.setmode(GPIO.BCM) 10 GPIO.setup(20,GPIO.OUT) 11 GPIO.setup(21,GPIO.OUT) 12 GPIO.setup(16,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) 13 GPIO.add_event_detect(16,GPIO.RISING,callback = release,bouncetime=4000) 14 15 16 17def rmoto(t,): 18 GPIO.output(21,1) 19 time.sleep(t) 20 print("right finish") 21 GPIO.output(21,0) 22 return 0 23 24def lmoto(t,): 25 GPIO.output(20,1) 26 time.sleep(t) 27 print("left finish") 28 GPIO.output(20,0) 29 return 0 30 31def release(channel): 32 print("motor start!") 33 rmoto(3) 34 time.sleep(3) 35 lmoto(3) 36 print("motor finish") 37 38 39def main(): 40 config() 41 try: 42 while True: 43 time.sleep(1) 44 except KeyboardInterrupt: 45 print("break") 46 GPIO.cleanup() 47 48 49if __name__ == "__main__": 50
モータードライバーはTOSHIBAのTA8080Kです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/04 06:39
2019/11/04 06:41
2019/11/04 06:54
2019/11/04 06:57
2019/11/04 07:09
2019/11/04 07:32
2019/11/04 07:44
2019/11/04 07:49