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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1508閲覧

Raspberry Pi ターミナルで実行できない

horisuke3232

総合スコア109

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/01/19 15:16

編集2018/01/19 15:43

Raspberry Piでpythonプログラムを起動するにあたり、GUIでpythonファイルをダブルクリックしてファイルを開き、実行を押すと起動し、ボタンを押すと音楽が再生されます。

プログラム内容はgpioに2つボタンを取り付け、それぞれのボタンを押すと割り当てられた音楽が再生されます。

python

1import pygame 2from gpiozero import Button 3 4pygame.init() 5 6btn_gen = Button(4) 7btn_man = Button(17) 8 9 10man = pygame.mixer.Sound("samples/man.wav") 11gen = pygame.mixer.Sound("samples/gen.wav") 12 13btn_gen.when_pressed = lambda: any(s.stop() for s in (gen, man)) or gen.play() 14btn_man.when_pressed = lambda: any(s.stop() for s in (gen, man)) or man.play() 15 16

こちらを、ターミナルで 
pi@raspberrypi:/gpio-music-box $ python musicbox2.py
としてもgpioのボタンを押すとpi@raspberrypi:
/gpio-music-box $
となり、音楽が再生されません。

原因はなんでしょうか?

namnium1125さんに教えていただき解決したコードを記述します。

python

1mport pygame 2from gpiozero import Button 3 4pygame.init() 5 6btn_gen = Button(4) 7btn_man = Button(17) 8 9 10man = pygame.mixer.Sound("samples/man.wav") 11gen = pygame.mixer.Sound("samples/gen.wav") 12 13num = 0 14while num <100: 15 16 btn_gen.when_pressed = lambda: any(s.stop() for s in (gen, man)) or gen.play() 17 btn_man.when_pressed = lambda: any(s.stop() for s in (gen, man)) or man.play() 18 num +1 19 20print("end") 21

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

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

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

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

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

namnium1125

2018/01/19 15:34 編集

すぐにプログラムが終了しているとか…?プログラムの終了部分にprint("end")を入れて実行した結果等を表示していただけると、原因がはっきりしてくると思います。 (追記)…これ書いてからコード見たんですけどこれすぐにプログラム終了しますね。ループ機能を持たせるべきだと思います。…修正欄に書いてしまいすみません…
horisuke3232

2018/01/19 15:36

ありがとうございます。print("end")を記述したところすぐにendとなりました。こちらを解消するには常に繰り返す記述をすれば良いのでしょうか?
namnium1125

2018/01/19 15:41

ループ機能を持たせるべきとは書きましたが、GUIでうまくいっているのでしたら下手にいじるわけにもいかないかも…GUIから立ち上げた場合はうまくいったのですよね?
horisuke3232

2018/01/19 15:41

while文を追加したところ解決しました。ありがとうございました。
namnium1125

2018/01/19 15:42

無事解決したならば何よりです。
guest

回答1

0

ベストアンサー

自己解決したならば回答者同様に回答してそれをベストアンサーに選ぶといいですよ。

whileのところはこうした方がいいのではという提案として以下回答します。

python

1import pygame 2from gpiozero import Button 3 4pygame.init() 5 6btn_gen = Button(4) 7btn_man = Button(17) 8 9 10man = pygame.mixer.Sound("samples/man.wav") 11gen = pygame.mixer.Sound("samples/gen.wav") 12 13btn_gen.when_pressed = lambda: any(s.stop() for s in (gen, man)) or gen.play() 14btn_man.when_pressed = lambda: any(s.stop() for s in (gen, man)) or man.play() 15 16# ↑一回でいいのでは…? 17 18#~~print("please press ctlr + c to stop")~~ 19#~~while True:~~ 20# ~~pass~~ 21 22input("press any keys")

荒っぽいですけど(無限ループですけど)ctrl + cで止めさせることにすれば回数制限等を設ける必要はなくなります。

まぁ、本来は終了機構等を別途用意するべきかもしれませんが…

今回の場合はwhile等のループを使わずinput関数を設置した方が安全で一番手っ取り早いかもしれません。試していないのでもしかしたらうまくいかないかもしれませんが、もしうまく行くのでしたらこっちの方がいいと思います。

投稿2018/01/19 15:53

編集2018/01/19 16:00
namnium1125

総合スコア2043

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問