• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Raspberry Pi B+ .wavファイル)

Raspberry Pi B+でアラームが鳴らない問題とLED制御について

このQ&Aのポイント
  • Raspberry Pi B+で設定時刻になるとLEDを点灯し、アラームを鳴らすプログラムを書いたが、2回目の起動ではアラームが鳴らない問題が発生している。
  • sudo haltで電源を一時的に落とし、再度起動すると問題は解消する。また、sudo reootで再起動しても問題は解消する。
  • アラームは.wavファイルで再生され、omxplayerを使用している。また、LEDの制御にはwiringPi.hを使用している。初心者であり、バッファやキャッシュのクリアが必要かどうかわからない。

質問者が選んだベストアンサー

  • ベストアンサー
  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.5

ラズパイのホームページは、御存知ですよね。 https://www.raspberrypi.org/forums/ ここには、フォーラム、FAQ、プログラミングと言ったものがあります。 ここを覗いてみるのも一つです。 2chとしては、 http://hayabusa6.2ch.net/test/read.cgi/linux/1424619905/

noname#256107
質問者

お礼

これではいつまで続くか分からないので締め切ることにしました。 yakan9さんには随分お世話になりました。本当にありがとうございました。

その他の回答 (4)

  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.4

回答番号3で、記載ミスをしました。 > それは、ストアードプログラミングと言われる方式です。 構造化プログラミングの間違いです。

  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.3

> man omxplayer でオプションを調べている所です。 限られた範囲内だけでなく、WEB検索してみるのも良いです。 キーとして、「ラズパイでomxplayerを使う」 http://blog.mamemomonga.com/2015/01/raspberry-pi-modelb.html omxplayer の記事があるのは、 http://deviceplus.jp/hobby/raspberrypi_entry_012/ この辺くらいかな。 > このプログラムは単にLEDをつけて音を出すだけではないのです。 > でも頭に思い描いているものを > 作り上げるには避けて通れないです。 Raspberry Pi というと、日経Linuxで毎号記事として載っていますね。 確か、去年の4月号あたりからでしょうか。 略して、「ラズパイ」という記事は、毎号見ます。 最近は、ロボット製作になってきました。 記事を見ていて感じることは、 プログラム記述がなっていないことです。 正式なプログラム技法といわれる方式で作られたプログラムは、非常にデバッグしやすい特徴があります。 それは、ストアードプログラミングと言われる方式です。 ラズパイ自身、昔の「マイコンキッド」みたいなものですが、 昔に比べたら、格段に高品質であることは間違いないです。 しかし、OSは、Linuxを使用しているので良いと思いますが、その他のサブルーチン等は、「趣味」の域のものと思われますので、余り信頼しない方が良いかも知れません。 それは、回答1に記載した、リユーザブルの保証をしていない可能性もあるということです。

noname#256107
質問者

お礼

そうです。日経 Linuxのムックの「ラズパイマガジン 2015年春号」とネットを頼りにここまで来ました。 何回もトラブルに見舞われ、なんとかここまで来たので諦める訳には行きません。

  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.2

> omxplayer の使い方に問題があるのではないかと思います。 当方もそう思います。  そこまで分っていれば、当方の場合であれば、 omxplayer が、 リユーザブルの保証 をしていない可能性があり、 別な個所に、omxplayerサブルーチンコールだけのロジックを作成しておき、このサブルーチンに入る前に、 必ず初期化して入るようにするか、 言い換えると、サブルーチンコール部分をコピーしてからというになります。 テスト的に、数個のomxplayerサブルーチンコールだけのロジックを作成しておき、順番に入って行かせてみることで、 リユーザブル性の保証がされていないことが分かるのではないでしょうか。 あるいは、この件に対しての、 man omxplayer があれば、読んでみる。 あるいは、readme 的な説明があれば読んでみる。 WEB検索してみる。

noname#256107
質問者

お礼

ご回答ありがとうございます。 man omxplayer でオプションを調べている所です。 このプログラムは単にLEDをつけて音を出すだけではないのです。でも頭に思い描いているものを 作り上げるには避けて通れないです。なんとか実現に向けて頑張りたいと思います。

noname#256107
質問者

補足

前に書いたと思いますが、wiringPi を使う前は何回でもアラームが鳴っていましたので、試しに #include <wiringPi.h> と LEDをON/OFFする関数の部分をコメントアウトしてコンパイルして実行してみた所、 2回目以降も何回でもアラームが鳴るようになりました。LEDをつないでいる、GPIOの部分が初期化できていないのではないかと思い、 https://tool-lab.com/2013/12/raspi-gpio-controlling-command-2/ を参考に、 if(wiringPiSetupGpio() == -1) return 1; をコードの最初の方に書き足しましたが、1回目はOKですが2回目はやはり omxplayer の所で止まります。 あと、気付いたのは、2回目にアラームを鳴らす部分に来た時に、スピーカから「ブツッ」という音が 出ている点です。 解決に向かっている気はします。諦めずに続けます。

  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.1

> 電源を入れて、1回目は正常に動作します。 > しかし、2回目はアラームが鳴りません。 > 途中で止まります。 こうしたプログラムのデバッグ方法は、最も簡単な方法として、 判断ボックスの前後にメッセージ出力させてデバッグするのが初心者でも分かります。 print step1. print step2. といったコメント出力行を入れていきます。 すると、貴殿がこう通るはずだと思っていたルーチンを通らないことが判明するでしょう。 何故か。 内部スイッチを使っていませんか。 その内部スイッチをそのメインルーチン/サブルーチンに入る前に初期化していますか。 もし初期化していなければ、貴殿が想定した流れにならない場合も発生します。 こうしたプログラム作成上の知識は、特に、大きく分類すると、2つです。 大きく分けると、 1.リユーザブルの保証。 2.リエントラントの保証。 詳細は、コンピュータ辞典等で調査してください。 簡単な厳密さを少し欠ける説明としては、 1.reusable routine 再使用可能ルーチン。 2.reentrant routine 再入可能ルーチン。 当然再使用可能ルーチンでもある。 1.との違いは、各変数はルーチン内には持たず、別な管理テーブルで一括管理する。 OSの基本部分のジョブやタスクのディスパッチャ(dispatcher)は有名です。

noname#256107
質問者

お礼

難しいですね。とりあえず、 print step1. のようにプログラムの流れをはっきりさせようと思います。 あきらめません。初心者から脱却する為に。 ご回答、ありがとうございます。

noname#256107
質問者

補足

yakan9さんのアドバイスを受けてprintf()で流れを調べましたが、意図通りに動いています。 しかし、2回目の実行時、 omxplayer を実行して、そこで止まります。流れはあっています。 設定ファイルを開いて時刻を設定していますが、そのファイルはきちんと終了時に閉じています。 omxplayer の使い方に問題があるのではないかと思います。