質問: 21: subprocess.call(cmd, shell=True) #コマンドを実効 GPIO.setmode(GPIO.BCM) GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP) #GPIO.RISING(ボタンを押してあげるイベント)を検知するとdefSwitchLCDを呼び出し,200msのあいだ他の命令を受け付けない GPIO.add_event_detect(21, GPIO.RISING, callback=defSwitchLCD, bouncetime=200) try: while True: sleep(0.01) except KeyboardInterrupt: pass GPIO.cleanup() ``` ### 試したこと 「service --status-all」で起動しているデーモンを調べたところ,デーモンは正常に起動しておりました。 「cat /sys/class/gpio/gpio21/value」でスイッチの状態を調べたところ,押している時には0,離しているときには1が観測されました。ふつうは逆ではないのかと思ったのですが、直接呼び出して実行すると正常に動作したので処理自体には影響がないと思っております。 デーモンスクリプトmydervice.sh及びにSwich_deamonには実行権限を与えています。 ### 補足情報(言語/FW/ツール等のバージョンなど) OSはrasbianです
回答: デーモン化をして、ボタンを押すことで期待されている動作は、コンソールにls -l の結果が出ることでしょうか。 そうだとすると、デーモン化の為に今見ているコンソールとは切り離されてls -l の結果が出力されてしまうので、画面(今見ているコンソール)では何も分かりません。デーモン化の方法にもよりますが、大抵は標準出力は/dev/nullにリダイレクトされてしまうので、適切に設定しないと何も確認できなくなります。 スイッチONで0, OFFで1になるのは、GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP) でプルアップ指定にしていることで、スイッチOFFでGPIOの端子に電圧がかかる為だと思います。 GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)で逆になります。