以下の不満を解消するため、会社員をやめてフリーランスになった『ユウイチ』と申します。
会社員時代の不満
・収入の限界(給料が上がらない)
・自由な時間が持てない(会社に拘束される)
・人間関係がしんどい
※フリーランスになり、これらの不満は解消されました(収入も増え、自分の時間を増やし、のびのびと働くことができております)
今回は趣味の電子工作についてなのですが、Arduinoで圧電スピーカーを用いてメロディーを鳴らす際の注意点を紹介します。
IRremoteライブラリとToneライブラリは同時に使えないので、その際はNewToneライブラリを使いましょうっていうお話です。
IRremoteライブラリとToneライブラリは同時使用できない!
Arduinoと圧電スピーカーでマリオやらゼルダを奏でてみたいと思い、リモコンの「1」を押したらマリオのメロディー、「2」を押したらゼルダのメロディーみたいな仕様にして作ってみたのですが、「Tone」ライブラリを使用してプログラムを作成したところ、まったくうまく動きませんでした。
具体的にはリモコンの信号を1回でも受信すると、その後正常にリモコン信号を受信できなくなりました。こういった意味不明な動きをするときは自分の実装レベルでバグらせているというより深いところに原因があることが多いので、いろいろ調べました。そして発見しました。
「IRremote」ライブラリと「Tone」ライブラリが同じタイマーを使用していることを!
ライブラリの中を詳しくは見ていないのですが、同じタイマーを使用しているのであればそれぞれのライブラリで好き勝手にタイマークリアとかするはずなので、うまく動くはずがありませんね。。。
Arduinoはタイマー0、タイマー1、タイマー2とタイマーを3本持っているので、どちらかのライブラリの中を変更して使用するタイマーを変更すればよいのですが、ライブラリの中を変更して、また入れなおすのは手間です。。。「誰か、作ってくれてないかなぁ」と思って探したら、[Timer1]を使って音を鳴らすライブラリ、「NewTone」ライブラリがありました!
やはり、困ったときはだれかがやってくれてることを期待して探すに限る笑
世の中の優秀な方々はけっこういろいろやってくださっています^^
ということで、「NewTone」ライブラリを使用して解決です。
NewToneライブラリをインストール
NewToneライブラリは以下のサイトからダウンロードできます。簡単にインストール手順を説明します。
まず、上記のサイトからNewTone_v1.0.zipをダウンロードします。
Arduino IDEからダウンロードしたzipファイルを読み込みます。「スケッチ」→「ライブラリをインクルード」→「.ZIP形式の・・・」から読み込みます。
以上でインストールは完了。ソースコードにて「#include <NewTone.h>」を記述することでライブラリの関数が使用できるようになります。
以上、とても簡単ですが、今回はNewToneライブラリについて紹介させていただきました。
まとめ
今回はNewToneライブラリについて紹介させていただきましたが、IRremoteライブラリなどを使用しないのであれば、「Tone」ライブラリで問題ありません。
余談ですが、タイマーを使用しているライブラリ使用時にそのタイマーを使用して割り込みなどは作れません。(当然ですが)
例えば、今回の記事の例だとIRremoteライブラリでタイマー1、NewToneライブラリでタイマー1を使用しておりますので、もし定期的に割り込みを作りたい処理が出てきたら、残っているタイマー0を使うことになります。またタイマーの制御については別の記事で紹介したいと思います。
ちなみに、今回の記事で紹介したメロディープログラムの完成形は以下で紹介しております。
こちらもCHECK
Arduino+圧電スピーカー(パッシブブザー)でマリオとゼルダを奏でてみました
以下の不満を解消するため、会社員をやめてフリーランスになった『ユウイチ』と申します。 ※フリーランスになり、これらの不満は解消されました(収入も増え、自分の時間を増やし、のびのびと働くことができており ...
続きを見る
最後まで読んでくださりありがとうございました。