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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Raspberry Pi

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

Python

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

Q&A

1回答

7956閲覧

raspberrypiでプログラム実行中に物理ボタンを押すとまた最初から実行させる処理の仕方

Ruteshi

総合スコア32

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Raspberry Pi

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

Python

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

1グッド

1クリップ

投稿2017/12/16 14:29

編集2022/01/12 10:55

###前提・実現したいこと
raspberrypiでGPIOを使用しタクトスイッチを押したら音楽を鳴らし鳴っている最中に同じボタンを押すとまたその曲の頭から音楽を鳴らすプログラムを実行させる記述

参考にさせて戴いたサイトを参考にボタンを押したらMP3を再生するプログラムを作成しましたのですがボタンを押して音楽を再生させ再生中にまた同じボタンを押すとその音楽の頭から再生させるというプログラムを作成したいです。

ボタンを押す→曲が鳴る→鳴っている最中にボタンを押す→また最初から音楽が鳴る→~

参考にさせていただいたサイト
http://robocad.blog.jp/archives/678444.html
Raspberry Pi タクトスイッチの入力を扱う その1

###該当のソースコード

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(24, GPIO.IN)

try:
while True:
if GPIO.input(24) == GPIO.HIGH:
check = commands.getoutput("mpg321 test.mp3")
GPIO.output(25, GPIO.HIGH)
else:
GPIO.output(25, GPIO.LOW)
sleep(0.01)

except KeyboardInterrupt:
pass

GPIO.cleanup()

(「mpg321」はraspberrypiでmp3を再生させるコマンド)
(「test.mp3」←再生させたいmp3)
###試したこと

「割り込み」処理?ではないかと思うのですが調べても僕の考える「割り込み」と調べて出てくる「割り込み」は何か違うような気がします。

最近やっと変数を理解しだしたばかりの初心者です
どこをどのようにしたらいいか皆目見当がつきません
なにかヒントでも頂けたらと思いこのサイトでご質問させていただきました
お考えつく方何卒よろしくお願いいたします。

###補足情報(言語/FW/ツール等のバージョンなど)
raspberrypi,python,GPIO

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答1

0

参考とされたHPRaspberry Pi タクトスイッチの入力を扱う その1を読んでみると抵抗により”PullDown”(常時LOWでタクトスイッチを押すとHIGH)の処理と理解して。
貴殿のソースを見ると、”LOW”の間、無制限で’commands.getoutput("mpg321 test.mp3")’を何度も呼び出す処理に見えます。私ならで記載しますが、以前の状態を適当な変数に保持して(”LOW”状態)これが”HIGH”になった時のみ動作させる方法が良いのでは?(通常はトリガーと言われます)。
突っ込んで言いますとGPIOの24がHIGH”の間は何度も繰り返す状態ではなく、”LOW”から”HIGH”に遷移(変化)した時だけにすれば良いかと。

投稿2017/12/16 15:13

MasahikoHirata

総合スコア3747

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

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

Ruteshi

2017/12/17 03:26

MasahikoHirataさん お返事ありがとうございます ご指摘を受けましたMasahikoHirataさんの前半のお話ですが参考サイトさんの「Raspberry Pi タクトスイッチの入力を扱う その1」に記載(UP)されているyoutube動画「raspberrypi タクトスイッチを押している間光LED」の様に本当に押した時だけ音楽がなります。押さないと待機状態?になっています。 後半のお話しですがループにしないということでしょうか?実際に僕が作った物でボタンを押してもその曲が終わるまで何も受け付けない状態になります。 ボタンを押す→曲が鳴る→鳴っている最中にボタンを押す→何も変わらず曲が流れている→終わる→最初に戻る
MasahikoHirata

2017/12/17 05:41

おそらく参考にされているHPではループの中ではGPIOの出力の制御だけですが、貴殿の実現したい音の再生では再生が終了するまでループに帰って来ないのでは?実現したいものは再生開始、再生中に”LOW"の入力(”HIGHからLOWへの遷移”)が有ったら再度頭から再生だと思うのですが。つまり”LOW"になった時に頭から再生で、再生プログラムから直ぐにループに戻るようにする必要があると思いますが。
Ruteshi

2017/12/19 14:34

MasahikoHirataさん お返事遅れてしまい申し訳ないです >>再生が終了するまでループに帰って来ないのでは? そうです、音楽事態が終わるまで帰ってきません。 MasahikoHirataさんの仰られているのは ボタンを押す((HIGH)音楽が鳴る)→ボタンを離す(LOW)頭から再生になると思うのですが… 要は押す度、押す度、頭から再生されれば良いのです 今回は音楽を再生って事ですが他のプログラムに置き換えてもらっても構いません (ボタンを押す度にまた最初から実行してくれれば)
mkgrei

2017/12/25 14:58

commands.getoutputだと実行が終わるまでPython側のプログラムが止まってしまうので、キー入力を監視することができません。 subprocess.Popenを使用して再生プログラムを新しいプロセスで実行し、ループ内でPopen.pollで実行状況の確認、Popen.terminateで実行を中止することができます。 https://docs.python.jp/3/library/subprocess.html Pythonのバージョンが古すぎるといけませんが…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問