フォト
2019年8月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
無料ブログはココログ

« MSX casio PV-7の代替えACアダプタ | トップページ | Arduino STM32のADC(アナログ・デジタル コンバータ)周辺の調査(1) »

2019年5月19日 (日)

Arduino用 MML文演奏ライブラリの作成 その2

前回からの続きです。

Dscn1761

Arduino および Arduino STM32環境で利用できる
MML(Music Macro :ミュージック・マクロ・ランゲージ) 演奏ライブラリを作成しました。

  ・MML_Play MML文演奏ライブラリ
     https://github.com/Tamakichi/MML_Play

バックグラウンド演奏にも対応するよう、実装しましたが
実際にどこまで利用出来るかは、評価不足です。

とりあえず、豊四季Tiny BASIC for Arduino、Arduino STM32のMML文処理は
このライブラリを使って一元管理しようと思います。

今回のライブラリ作成で、次の点で少々ハマってしまいました。
1)tone()の引数durationの挙動
2)attachInterrupt()

Arduinoで周波数を指定した音だしは、tone()関数が用意されています。
出力長さを指定する第3引数 durationはミリ秒で指定するのですが、
  tone(8,400,500);
  tone(8,800,500);

と実行すると、1番目の400Hzの音出し500ミリ秒を待たずに
2番目の800Hzの音出しが実行されます。
指定時間音出し完了の上、次の処理に移ると思い込んでいました。

tone()は長さ指定しても、即時完了して次の処理に移ります。
並行動作で、500ミリ秒後に勝手に音が止まります。
ですので、1番目の音だしの処理後すぐに2番目の音出しに移り
演奏としてのタイミングが意図しないものになってしまいました。
対策としては、duration分、delay()で時間待ちする必要があります。

次にattachInterrupt()ですが、
ArduinoとArduino STM32で仕様が異なります。

Arduinoでは、
  attachInterrupt(interrupt, function, mode)
といった感じで第1引数には割り込み番号を指定します。

ところが、
Arduino STM32、micro:bit 用Arduino(arduino-nRF5) の同関数では
  attachInterrupt(pin, function, mode)
ピン番号を指定します。

Arduinoでもピン番号を指定するものと思い込んでプログラムを作成したところ
動作せず、しばらく原因が分からずハマってしまいました。

微妙に、仕様が異なるのはちょっと困りますね。

« MSX casio PV-7の代替えACアダプタ | トップページ | Arduino STM32のADC(アナログ・デジタル コンバータ)周辺の調査(1) »

arduino」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« MSX casio PV-7の代替えACアダプタ | トップページ | Arduino STM32のADC(アナログ・デジタル コンバータ)周辺の調査(1) »