Site Calendar

サイトカレンダをスキップ

2017年 04月
«
»
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

メインメニュー

ログイン

ログイン

 2017年4月28日(金) 23:05 JST

MenZ-DECK開発2012/11/06

  • 2012年11月 6日(火) 19:24 JST
  • 投稿者:
    aminosan
  • 閲覧数
    3,519
いままでソフトの記事がなかったので、たまには書いてみます。

前回の活動日で、コントローラにつけるLEDの話になったけど、
MIDIを送信することばかり考えていて、受信してLEDを光らせることを全く考えていなかったことに気がつく。

これはマズいということで、急いでコードを書くことに。

とはいえ、MIDIを送信するっていうプロトタイプから作っていったため、
MIDIを受信させる作りにはなっておらず、ここで一気に作りなおすことに。

#そもそもMIDIのライブラリあるんだから使っとけって話

ここで大きな問題に出くわす。

MIDIを受信したときに、どういうデータが送られてきてるかをデバッグのために見ようと思ったけど、
ソフトウェアシリアルのデータをPCで受信しても、文字化けのようなデータしか送られてこず、
正しいデータが一向に送られてこない。

かれこれ3日ほど悩んだ挙句、MIDIライブラリをみたところ、リファレンスにはない謎の引数を発見。

SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */)

bool inverse_logicってなんですか・・・
これをtrueに指定してやることでうまいことデータを受信した。

調べてみると、1と0の極性を反転させるオプションらしく、
RS232としてデータを流すときは極性を反転させる必要があるとかどうとか。
(@maris_HYさん、アドバイスありがとうございました)

#ちなみにArduino1.0.0からSoftwareSerialライブラリは、
#サテライト・エクササイズのときにお世話になったMikalさんのNewSoftSerialに置き換わったよ。

なにはともあれ、ArduinoからPCへ通信ができたので、
実際に受信したMIDIを表示してみることに。










(開発風景)

が、これまたうまいこと受信してくれない。

ソフトウェアシリアルでいろいろ試した知識を生かしてごにょごにょといじってみると、
31250bps(MIDIの通信速度)ではうまく受信してくれないことが判明。
試しに、

MIDI.begin();
Serial.begin(38400);

という、ライブラリさんに反抗してみると、
今度はうまいことMIDIの信号がとれた。










#Recv:0003:90~ってなってるのがNoteOnで80~ってなってるのがNoteOff


これでうまいことMIDI信号を料理する準備が整ったので、
次にLEDを表示する回路にとりかかる。

制作中のコントローラは全部で14個のLEDを使うことになるんだけど、
余ってるピンが残り3本しかない状況で14個のLEDを光らすのはどうするのか。

うんうんと頭を悩ませてると、Zaganさんが「595使えば?」との提案が。

なんのことだろと調べてみると、74HC595っていうICはシフトレジスタらしい。
こいつを使うと3本の配線でいくらでもLEDが制御できる優れモノ。
詳しくはこちら: http://www.arduino.cc/en/Tutorial/ShiftOut

そいつは名案、気が付かなかった!

ということで、実際に試してみる。










光った!
悩みに悩んだ3日間が救われた一瞬です。

動画はこちら: http://www.youtube.com/watch?v=t3zQ7TTUz-c

とはいえ、まだまだ課題が残っているので、
しこしこと作業は続くのであった・・・

トラックバック

このエントリのトラックバックURL:
http://www.the-menz.com/trackback.php?id=2012110619244260

サイト管理者はコメントに関する責任を負いません。