EEPROMにメロディデータを作成して音を鳴らします

〔Arduinoの動かせ方入門に戻る〕



ここでは、EEPROMにメロディデータを2曲作成して、スイッチの切替えで曲を選択し鳴らしています。
尚、圧電スピーカ(圧電ブザー)でなく普通のスピーカを使ってメロディを鳴らす場合はこちらを参考にして下さい。

Sound1

 この画面が配線図です。
 圧電スピーカの出力にはデジタル出力12番
 ピンを使用します。

 アナログ入力をスイッチの替りに使用します
 5番アナログ端子に5Vを接続すると、
           スイッチ1がONとします。
 4番アナログ端子に5Vを接続すると、
           スイッチ2がONとします。
 4番・5番共に未配線ならスイッチ1,2はOFFです。

 スイッチ1がONならメロディデータ1を鳴らし、
 スイッチ2がONならメロディデータ2を鳴らし、
 スイッチOFFならメロディは鳴りません。

 Arduinoの電源5Vとアナログ4/5番をジャンパー線でつなげばOKです。
 スイッチと抵抗部品が要りませんね

《メロディを鳴らすスケッチ》

EEPROMからメロディデータを読出して音を鳴らすスケッチをここからダウンロードします。
ダウンロードスケッチの保存先と開き方はこちらを参照下さい。
このスケッチはEEPROMにメロディデータが書込まれていないと動作しません。
EEPROMにメロディデータを書込む方法は下記に記載します。

このスケッチでは、
メロディデータ1をEEPROMの0番地から読込み、メロディデータ2をEEPROMの0x20番地から読込んでいます。 この番地は、自分で作成したメロディデータにより変更して下さい。
Arduino Duemilanove 328ならEEPROMは1024バイト有ります、約510音符位は書込めるでしょう。
また、EEPROMに書込んだメロディデータは電気無くてもUSBメモリみたいに保持されます。

《EEPROMにメロディデータを書込む方法》

EEPROMにメロディデータを書込むには、EEPROMメンテナンスツールスケッチをダウンロードします。

@ダウンロードしたファイルを解凍します。

Aダウンロードしたファイルを解凍すると、[EEPROM_MNT_Melody]のディレクトリが出来ています。

BArduinoIDEを起動させて、メニューバーの「File」→「Preferences」をクリックします。
 (Preferencesウインドウ画面が表示されます)

CPreferencesウインドウ画面の「Sketchbook location:」の所に設定されているディレクトリ下に、
 上で解凍して出来た[EEPROM_MNT_Melody]のディレクトリを移動させます。

DArduinoIDEを一度終了させ、再び起動させます。

Eメニューバーの「File」→「Sketchbook」からサブメニューを表示させ、[EEPROM_MNT_Melody]を
 クリックします。(新規ウインドウでEEPROM_MNT_Melodyのスケッチが表示されます)

Fコンパイルとアップロードを行いArduinoに書込んで下さい。
 (こちらにコンパイルとアップロードの方法が書いてあります参照して下さい)

Gアップロードが終了したら、IDEのシリアルモニター(COM画面)を起動させます。
 準備完了です。(シリアルモニターの使い方はこちらを合わせて参照して下さい)

メロディデータの構造

[テンポ][音データ1]---------[音データn][終了]
テンポは1バイトです、10M.M.〜250M.M.までの数値を入力します。
音データは2バイトです、音階(11bit)と音符(5bit)のデータです。
終了は1バイトです、0xFFを入力します。(これは必ず入力します、ないと最後が判りません)

音符:全音符(1)、2分音符(2)、4分音符(4)、8分音符(8)、16分音符(16)、32分音符(32)、
   64分音符(64)、128分音符(128)、付点音符も入力可能。
音階:do re mi fa so ra si で入力します、半音あげるも入力可能。
   音域(オクターブ)も入力します。

EEPROMメンテナンスツールの使い方

ArduinoIDEの基本的な使い方はこちらを参考にして下さい。

一度、EEPROM_MNT_MelodyのスケッチをArduinoに書き込んであれば何時でも操作できます。

@ ArduinoをUSBでパソコンに接続します。

A ArduinoIDEを起動させて、IDEのシリアルモニター(COM画面)を開きます。
  (COM画面の左下に有る[Autoscroll]はチェックを付けといて下さい、操作しやすいです)

 <<< Arduino EEPROM Maintenance Tool Ver.01.01 >>>
 Menu Command [E:EEPROM Edit] [D:EEPROM display] [T:Transfer] [a:about this] [M:Melody]

  この様に画面表示されていると思います。
  メニューのコマンド入力待ちです。(コマンドは小文字でもOKです)

B COM画面の送信テキストボックスに”M”を入力してArduinoに送信します。
  (送信ボタンをクリックするよりは[Enter]キーが操作しやすいです)

C メロディデータの作成と表示をする操作のコマンド入力待ちです。

<<< Create a Melody EEPROM >>>
Command [R:Return Main] [S<Adrs(HEX)>:Set Adrs] [I:Input] [D<t>:Ddisplay] [F]
Now the Address of -> 0000 ←<データ入力を開始する現在のアドレスが表示される>

   R:メインメニューのコマンド入力へ戻ります。
   S:データ入力を開始するアドレスを変更します。
   I:メロディデータの入力を開始します。
   D:作成したメロディデータの内容を表示します。
   F:終了データ0xFFを入力します。

  Sコマンド
   ・アドレス指定
   Sxxxx x部にアドレスを16進数で指定します。
   例) S30<Enter> データ入力を開始するアドレスを30番地からに設定

  Fコマンド
   次の様に表示されます。
    Now the Address of -> 0010
    Want to enter complete 0xFF ? (Y/N) =
   0xFFを入力するならY<Enter>です、この場合は0x10番地に0xFFが書込まれます。

  Dコマンド
   現在設定されているアドレスから14個ずつ表示を開始します。
   表示するアドレスを変更する場合はSコマンドを使用して下さい。
   ・dt<Enter> はテンポも表示します。
   Temp = 60M.M.    ←<テンポ表示>
   Adrs  : 0001 0003 0005 0007 0009 000B 000D 000F 0011 0013 0015 0017 0019 001B 
   Scale :  do   re   mi   fa   so   ra   si   do  ←<音階>
   Note  :   4    4    4    4    4    4    4    4  ←<音符(これは全て4分音符)>
   Octave:   4    4    4    4    4    4    4    5  ←<音域(オクターブ)>
   ・d<Enter> は上の続きから表示します、テンポは表示しません。

   注意)メロディデータの構造を無視したアドレスをSコマンドで設定すると表示がずれます。
      例えば、0番地から作成しているとして、d<Enter>としたらテンポが表示されない分ずれます。
      この場合は、S1<Enter>としてd<Enter>とすればOKです。
      また、上の表示例からS5<Enter>はOKですが、S6<Enter>ならずれます。

D 上のCでIコマンドを入力した場合は下記の様に入力モードに移行します。

   [R:return] [TE:temp(10-250)] [OC:octave(2-6)] [FF] [<:prev] [>:next]
   [do:re:mi:fa:so:ra:si:qf do<note(1-128)> (do4)(re#4)(ra8.)]
   Octave(Range) -> 4  ←<現在の音域(オクターブ)表示される>

   R :Cのコマンド入力へ戻ります。
   <:入力するアドレスを1個(2byte)戻します。
   >:入力するアドレスを1個(2byte)進めます。
   FF:終了データ0xFFを入力します。(上のFコマンドと同じです)
   TE:テンポの入力を行います。
   OC:音域(オクターブ)の入力を行います。
   DO、RE,MI,FA、SO、RA、SI、QF:音階と音符の入力です。

  TEコマンド
   ・テンポデータ指定
   TExxx x部に10M.M.〜250M.M.の範囲で指定します。
   例) TE80<Enter> テンポ80M.M.で設定されます。
      (81とかも入力出来ちゃったりするんですがぁ....どうなんでしょう?)
      (1つの曲の先頭に入力されていないといけません)

  OCコマンド
   ・音域データ指定
   OCx x部に2〜6の範囲で指定します。(C2〜B6までです)
   例) OC5<Enter> 音域(オクターブ)が5で設定されます。
     (C2)2←→3←→4←→5←→6(B6) 4が通常で左側が低く、右側が高くなります。
   Octave(Range) -> 4  ← この行表示に注意(起動時は4です)

  音階と音符
   ・データ入力構造 [音階#][音符.]<Enter>
   音階:do re mi fa so ra si  と#を付けると半音上がります。
   音符:上記のメロディデータの構造で書いた様に1-128で入力します。 付点音符は.を付けます。

   例)do4 →ドの4分音符  do#4 →ド(半音上)の4分音符  do4.→ドの付点4分音符
     前と同じ音符入力なら省略も可能です。

   ・休符の入力  qf[音符.]<Enter>
   例)qf4 →4分休符  qf8.→8分付点休符

   1オクターブ上の音階入力時はOC5<Enter>と変更してdo4<Enter>とします、
   これはB5ですね。(このまま切替えないとOC5が続きます)

使い方の例

Sound1

 これをEEPROMのアドレス0x80番地から書込むとします
 テンポは120M.M.とします。


@ arduinoIDEのCOM画面が起動され下のメインメニューが表示されています。

 <<< Arduino EEPROM Maintenance Tool Ver.01.01 >>>
 Menu Command [E:EEPROM Edit] [D:EEPROM display] [a:about this] [M:Melody]

m<Enter>を入力

A メロディデータ作成と表示のメニュー

<<< Create a Melody EEPROM >>>
Command [R:Return Main] [S<Adrs(HEX)>:Set Adrs] [I:Input] [D<t>:Ddisplay] [F]
Now the Address of -> 0000

s80<Enter>を入力   ←<書込む番地を設定>
Now the Address of -> 0080

i<Enter>を入力

B メロディデータ入力モードです、作成用コマンドメニューが表示されます。

[R:return] [TE:temp(10-250)] [OC:octave(2-6)] [FF] [<:prev] [>:next]
[do:re:mi:fa:so:ra:si:qf do<note(1-128)> (do4)(re#4)(ra8.)]
Octave(Range) -> 4

te120<Enter>を入力   ←<テンポを設定>
Temp = 120M.M.

oc5<Enter>を入力   ←<1オクターブ高いので5を設定>
Octave(Range) 4 -> 5

re4.<Enter>を入力 (D5)
[Adrs:0081][Scale: 587Hz re ][Note: 4.][Octave: 5]
re8<Enter>を入力  (D5)
[Adrs:0083][Scale: 587Hz re ][Note: 8][Octave: 5]
re4.<Enter>を入力 (D5)
[Adrs:0085][Scale: 587Hz re ][Note: 4.][Octave: 5]
oc4<Enter>を入力
Octave(Range) 5 -> 4
si8<Enter>を入力  (B4)
[Adrs:0087][Scale: 494Hz si ][Note: 8][Octave: 4]
oc5<Enter>を入力
Octave(Range) 4 -> 5
do4.<Enter>を入力 (C5)
[Adrs:0089][Scale: 523Hz do ][Note: 4.][Octave: 5]
ff<Enter>を入力   ←<入力終了0xff入れます、まだ途中なら入れなくてもOK>
Now the Address of -> 008B
Want to enter complete 0xFF ? (Y/N) =
y<Enter>を入力

r<Enter>を入力   ←<入力モード終了Aに戻ります>

C 作成したデータを表示して見ます。
<<< Create a Melody EEPROM >>>
Command [R:Return Main] [S<Adrs(HEX)>:Set Adrs] [I:Input] [D<t>:Ddisplay] [F]
Now the Address of -> 008C

s80<Enter>を入力   ←<表示開始番地を設定>
Now the Address of -> 0080

dt<Enter>を入力
Temp = 120M.M.
Adrs  : 0081 0083 0085 0087 0089 008B 008D 008F 0091 0093 0095 0097 0099 009B 
Scale :  re   re   re   si   do   
Note  :   4.   8    4.   8    4. 
Octave:   5    5    5    4    5
もし、データ入力の続きを行う場合は0x008Bのアドレスから開始します。

《その他操作》

このソフト、メロディデータをEEPROMに書込むスケッチはこちらの機能に追加したソフトです。
メロディ書込み機能以外の使い方はそちらを参照して下さい。

また、作成したメロディのデータをファイルに保存したり、保存したファイルからEEPROに書き込んだり出来ます。 「ファイルの転送」機能はこちらを参照して下さい。

ダウンロードして解凍した[EEPROM_MNT_Melody]のディレクトリの中にサンプルメロディデータとして
EEPROMデータを付けときました、EEPROMに転送書込みすればメロディデータとして利用できます。




【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.