Arduino スキルアップ プログラミング関連スキル ポートフォリオ 電子工作

Arduinoでメロディーを鳴らす際の注意点!IRremote使用時はNewToneを使おう!

エンジニア歴20年以上、フリーランスでソフトウェアエンジニア・ゲームクリエイター・シナリオライターをやっております『NaruTaku』と申します。

今回は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+圧電スピーカー(パッシブブザー)でマリオとゼルダを奏でてみました

続きを見る

最後まで読んでくださりありがとうございました。

  • この記事を書いた人
  • 最新記事

NaruTaku

40代のフリーランスエンジニア・シナリオライター。 20代前半から20年間エンジニアとしてキャリアを積みフリーランスへ転身。ソフトウェア開発とゲーム開発、シナリオ執筆をメインに、プログラミング講師・Webライターとしても活動。また、フリーランスになり見た目の重要性に今さら気づき、ヒゲ脱毛を実施中。

-Arduino, スキルアップ, プログラミング関連スキル, ポートフォリオ, 電子工作