電子工作入門プログラミング入門-基礎1今回はアラーム音をメロディに変更します。アラーム音をメロディに変えようここまでのプログラミングで、キッチンタイマーとしての動作はある程度完成しました。音楽まで鳴らせるスピーカーがあるのに、時間がきたら単調なアラーム音が鳴るだけではちょっと寂しいですよね。そこで、今の単調なアラーム音をメロディーに変更しようと思います。音階を#define定義する第31回の記事で説明したように、Arduinoではtone()/noTone()命令で指定した周波数の音程を鳴らすことができます。tone命令でいちいち数字を書いて周波数を指定するのはわかりづらいので、まずは音階の名前と周波数を#defineで定義しておきましょう。#defineで音階名を定義する場合、日本人が慣れている「ドレミファソラシ」で名前を定義しようと思います。「ドレミファソラシ」はイタリア語表記何ですよね。日本語表記は「ハニホヘトイロ」になります。英語表記では「CDEFGAB」になります。考えてみると日本ではいろいろな表記が混在して使われていますよね。音程は普通「ドレミファ」を使いますが、曲調を表現する場合は「ハ長調」など「ハニホヘト」の日本語表記を使っています。Macintoshでは無償の音楽作成アプリGarageBandが有名ですが、このようなDTMアプリ(音楽作成アプリ)では音階の指定に「CDEFG」が使われています。音階はオクターブごとに番号が振られていて、普通のドは第4オクターブになっています。1オクターブ低いドは第3オクターブ、1オクターブ高いドは第5オクターブです。ピアノの黒い鍵盤は隣の音と半音違いになり、左隣の音階名に「#」(シャープ)をつけます。以上をまとめると以下のように音階名が決められています。いうことで、音階と周波数の定義は、音階名とオクターブ番号を使って#define定義しようと思います。普通のド(第4オクターブのド)は440Hzですので以下のように定義しようと思います。ド(第4オクターブ)第4オクターブを中心に、3オクターブ分あればある程度の曲は作れると思いますので、以下のように3オクターブ分定義してみました。半音の「#」など、記号はC/C++言語では特殊文字として扱われることがあるので、実際の#defineでは音階名に「S」をつけて使うことにします。音階の#define定義はできましたので、この定義名を使って音を鳴らすことにします。DO_4);で鳴らすことができます。SPEAKERはスピーカーが接続されているArduioボードの端子番号で、#defineで定義しています。RE_4);と書けばレの音を鳴らすことができます。音を止めるときはnoTone()命令を書けばOKです。いうことで適当なメロディーを作ってアラーム音をメロディー音に変更してみましょう。メロディー音を作るメロディーは最近の曲を使うと著作権の問題が出てきますので、適当にメロディーを作ってみました。それぞれの音の長さは200ms(ミリ秒)で、以下のメロディーにしてみます。何か好きな曲があればその曲にしてみてください。「ドミソミドミソミドミソシド」なんとも芸がない感じですが、スケッチはこのメロディーで行きましょう。それぞれの音は200msの長さで鳴らしますので、以下のようにスケッチに書けばOKです。音を消すnoTone(SPEAKER);キッチンタイマーの時間が来たら、このメロディーを3回鳴らすようにしたいと思います。3回鳴らすのは簡単ですよね。今のスケッチがアラーム音を3回鳴らすようにしてありますので、その部分をメロディーに置き換えればOKです。スケッチを作るそれではスケッチをメロディーを鳴らすように変更してみましょう。スケッチのsetup()部分の前に音階の定義を書きます。アラーム音の部分をメロディーに置き換えればOKです。このように変更したスケッチを以下に示します。今回のスケッチの変更は入力すると面倒ですので、コピペしてしまいましょう。Microにスケッチを送って動作を確認してみましょう。上のスケッチを動作させると、ちょっと気付いたことがあると思います。「ドミソミドミソミドミソシド」というメロディーがつながってしまって、「ドミソミドミソミドミソシドドミソミドミソミドミソシドドミソミドミソミドミソシド」という1つのメロディーになってしまっています。「ドミソミドミソミドミソシド」を3回繰り返しとして聞こえるように、「ドミソミドミソミドミソシド」のメロディーが終わったら少し時間をおいて次の「ドミソミドミソミドミソシド」が鳴るようにスケッチを変更してください。スケッチが長いですよねキッチンタイマーのアラームをメロディーに変更したら、ずいぶんとスケッチが長くなってしまいました。