Raspberry piでスイッチでコマンドが実効されるように実装しました。
しかしブレッドボード上のスイッチを押すと時々コマンドが2回実行される時があります。本来は一度スイッチを押すことで1度だけ実行されるようにしたいのですが,何かソースコード上に問題はありますでしょうか?
import RPi.GPIO as GPIO from time import sleep import subprocess def defSwitchLCD(channel): call = "aplay /python3/start.wav" cmd = "sudo sh /shell_scripts/voice-recorder.sh" #実行するコマンド if channel == 21: subprocess.call(call,shell=True) subprocess.call(cmd, shell=True) #コマンドを実効 GPIO.setmode(GPIO.BCM) GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP) #GPIO.RISING(ボタンを押してあげるイベント)を検知するとdefSwitchLCDを呼び出し,500msのあいだ他の命令 を受け付けない GPIO.add_event_detect(21, GPIO.RISING, callback=defSwitchLCD, bouncetime=500) try: while True: sleep(0.01) except KeyboardInterrupt: pass GPIO.cleanup()
どのようなスイッチか参考に教えていただけますか?
ありがとうございます、参考になります。
bouncetimeの値を試験的に思い切り増やしてみても再現するのでしょうか?
>>keicha_hsrさん ご意見ありがとうございます。bouncetimeの値を試験的に10000msにしたときに正常に一回だけ処理が実行されるようになりました。参考サイトでは200msで実装していたので少々疑問点は残りますが,望んでいた処理が実装できたので良かったです。ありがとうございました。
10000ms!?1桁間違えていませんか?10秒というのはさすがに巨大すぎるような・・・。
それが10000msにしました。それでしばらくしてからまた何回か試してみたのですが、やはり10000msにしても数回に一回は2回処理が実行されてしまうことがありました。もしプログラムに問題が無いのであれば、ブレッドボード上に構成した回路の接触不良という可能性もあるかと思いますが、プログラムの方に何か問題はありますでしょうか?
あなたの回答
tips
プレビュー