質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Q&A

1回答

1156閲覧

raspberry piでスイッチが反応しない

hashimon

総合スコア18

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

0グッド

1クリップ

投稿2017/09/27 07:54

raspberry piで下記のWebサイトを参考に、ブレッドボード上のスイッチを押すととある処理を行うプログラムを作成し,superviserを使ってデーモン化しました。
http://raspi.seesaa.net/article/418174651.html
まず動作確認をするためにスイッチをおすと「ls -l」コマンドを実行するようにプログラムしたところ、logファイルにファイルの一覧が表示されてました。
スイッチの動作確認ができたので、次はスイッチを押すと他のスクリプトが実行されるように「sh [スクリプト名]」コマンドを実行しようとしたのですが、何も反応がありませんでした。そのほか命令を「reboot」等に変えて試しても見たのですが、一向に反応がありません。

すなわち「表示する等の処理はlogファイルに出力結果が書き込まれているため正常に動作していることが確認できるが、表示以外の処理を実行すると正常に実行されない。」という状況です。以下がそのソースコードです。プログラムの言語はpython3で,OSはrasbianです。
なにか原因等がわかる方がいらっしゃいましたら、ご指摘お願いいたします。

python

1import RPi.GPIO as GPIO 2import time 3import os 4 5GPIO.setmode(GPIO.BCM) 6GPIO.setup(21,GPIO.IN,pull_up_down=GPIO.PUD_UP) 7 8button_previous = 1 9button_current = 1 10brojac = 0 11flag_pressed = 0 12 13 14try: 15 GPIO.wait_for_edge(21, GPIO.FALLING) 16 17 while True: 18 button_current = GPIO.input(21) 19 flag_pressed = button_previous + button_current 20 21 if (not(flag_pressed)): 22 brojac += 1 23 else: 24 brojac = 0 25 26 if(button_current and (not button_previous)): 27 os.system("sh /shell_scripts/voice-recorder.sh") 28 break 29 30 button_previous = button_current 31 time.sleep(0.03) 32 33except KeyboardInterrupt: 34 GPIO.cleanup() 35GPIO.cleanup() 36

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

本来の要望としてボタンを押した時(if文で真のとき)にbreak したいのか、
それとも必ずbreakしたいのかが不確かなのですが、少なくとも

if(button_current and (not button_previous)): os.system("sh /shell_scripts/voice-recorder.sh") break

となっていて、breakがあるので、while文で繰り返されません。1回でループを終わってしまいます。
つまり、デーモン化して起動しても、ボタンを押す前にプロセスが終了してしまいます。

また、ターミナルで手動で以下を正しく実行できるのかを確認してください。
(/shell_scripts と言うディレクトリは存在するのでしょうか)

$ sh /shell_scripts/voice-recorder.sh

投稿2017/09/27 10:54

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hashimon

2017/09/28 01:41

期待する動作としては、if文で真のとき(ボタンが押されたとき)にbreakしたいと思っております。 なのでご指摘を受けた通りif文の中にbreakが入るように改良,再起動して試したところやはり反応がありません。/shell_script/voicerecorder.shも存在していることが確認できました。。。 お手数かけてもうしわけありませんが、何か他に考えられる可能性はありますでしょうか?
dodox86

2017/09/28 02:00

プログラム中では /shell_script"s"/ と、ディレクトリ名の最後が's' です。コメントでは/shell_script/ ですが、どちらが正しいでしょうか。
dodox86

2017/09/28 03:16

補足です。そもそもの話になりますが、まず、手動で実行を試してみたでしょうか。 ひとつひとつ確認しましょう。 1: 手動でターミナルから /shell_scripts/voice-recorder.sh は実行できるか? 2: 同じくターミナルから sh /shell_scripts/voice-recorder.sh は実行できるか? 3: 2でダメなら、/shell_scripts/voice-recorder.sh 内で記述されているシェルの文法が合ってません。シバン(shebang/一行目、#!/なんたら)の部分がミスマッチ? 4: 3までOKなら、python のプログラムか、デーモンで動作したときのシェルの状況(環境変数とか)が違ってて、期待している動作をしていない可能性があります。
hashimon

2017/09/30 09:08

3までは実行できたので、恐らく4が問題だと思います。しかしそもそもの私の知識事態が乏しいので、もっと勉強しようと思います。 いろいろとアドバイスしていただき本当にありがとうございました。もし機会がありましたらよろしくお願いいたします。
GOTA77

2017/10/07 09:59

基本的なことかもしれませんが、デーモンとシェルの実行権限があっていないとかはないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問