2005
6
7
8
9
10
11
12
2006
1
2
3
4
5
6
7
8
9
10
11
12
2007
1
2
3
4
5
6
7
8
9
10
11
12
2008
1
2
3
4
5
6
7
8
9
10
11
12
2009
1
2
3
4
5
6
7
8
9
10
11
12
2010
1
2
3
4
5
6
7
8
9
10
11
12
2011
1
2
3
4
5
6
7
8
9
10
11
12
2012
1
2
3
4
5
--
最近の5件
--
bakaid: 20120505
そういえば、「make」の和訳は「自作」がいいんじゃないかと 思った。何回も書いてるけど「ものづくり」だと産業色が 強すぎて。それに「自作」だとDIYのニュアンスもあるしね。 -- Arduino ADKって知ってますか? http://arduino.cc/en/Main/ArduinoBoardADK Arduino MegaにUSBホストの機能を追加したもの。このボード、 Android Open Accessory Development Kitのリファレンス ボードみたいな感じで。要は、Android端末に接続するデバイスを 開発するためのボードなんですけど。 とりあえずAndroidのことはほっといて、USBホスト機能が一体化 されたArduinoとして魅力を感じたわけです。 実際、Arduino ADKは、Arduino MegaにUSBホストのシールドを 載っけたのとほぼ同じ。USBホストのライブラリも、SparkFunの USBホストシールド向けのがほぼそのまま使われてます: http://www.sparkfun.com/products/9947 USBホスト機能が一体化されてる点がポイントというのは、別の シールドを載せたかったからなんです。何段にもシールドを 重ねるのが好きな人もいるんですけど、自分は避けたかった: http://shieldlist.org/ 載っけるシールドは、前にも紹介したことがあるかもしれませんけど、 SparkFunのMusical Instrument Shield: http://www.sparkfun.com/products/10529 MIシールドを載っけたArduino ADKにMIDIキーボードを つなげて音を出すっていうことを企んだわけです。 いきさつを書くと長くなるんで、結論を先に書くと、プロジェクトは 成功しました。ソースはgithubで公開してます: https://github.com/tkojitu/NomaoiMusb イヤア、Arduinoでmakeして、ソースをgithubで公開するって、 時代の波に乗ってる感じがしますね!動画でも撮ればバッチシ なんですけど、部屋が映っちゃうのはカンベンな! -- 以下は長いいきさつ。Arduinoに興味のない人が読んでも 面白くないでしょう。 USBホストシールドにMIDIデバイスをつなげる実例がすでに あります。Makeでブログを公開されてる Collin Cunninghamさんの記事: http://blog.makezine.com/2010/11/30/usbhacking/ で、ゴールデンウィークに入ったので、届いてたArduino ADKで 開発をはじめました。まずADKの開発環境を整えるとこからなん ですけど、どうも、Arduino側も、Android側も、Webの情報は 古いらしく、ちょっと混乱しました。 Arduino ADKのページを見ると「boards.txtを云々」なんて 書いてあるんですけど、Arduino IDE 1.0ならばそんなことは やらないでもいいみたいです。IDEのメニューには「Arduino Mega 2560 or Mega ADK」って出てきます。ただし、USBホストの ライブラリなんかは、Googleのとこからもらってきてコピーする 必要があります。 このGoogleのライブラリがまたちょっと古くてコンパイルが通りません。 WProgram.hは、IDE 1.0でArduino.hに置き換えられたみたいです。 それから、Max_LCD::writeはスーパークラスのプロトタイプが 変わってて、size_tを返すようになりました。とりあえず1を返せば いいみたいです。 で、ADKのUSBホストライブラリ、さっきも書いたとおり、SparkFunの USBホストシールド向けのライブラリがベースになってます。でも、 SparkFunのライブラリは最新が2.0なんですけど、ADKのは それより前のもの(レガシーと呼ばれてる)がベースになってる みたい: https://github.com/felis/USB_Host_Shield ADKとレガシーとどっちがいいか迷ったんですけど、とりあえず ADKのライブラリのままにしておきました。ただ、レガシーの ほうにはサンプルプログラムがあるので、それは使わせてもらう ことに。 で、このサンプルのdescriptor_parserも修正する必要が あって。Spi.hはいらなくなったので消せばいい。 Serial.print(c, BYTE)はSerial.print(c)に変えれば いい。これでUSB MIDIキーボードをつなげるとデバイス情報が ダンプされます。 で、Collinさんのスケッチを修正しつつADKにアップロードして 動くのを確かめたんですけど。いきなりアップロードできなく なっちゃったんですよね。何かおかしなことをやった覚えが全然 ない。IDEでShiftキーを押しながらアップロードボタンを押すと 情報が出るというのでやってみると: avrdude: usbdev_open(): did not find any USB device "usb" というエラー。これしか出ないんですけど。Webとか漁ってもよく わかんなくて、「ブートローダがぶっ壊れた?」と思って焦りました。 結局、PC (WinXP)を再起動することで解決したんですけど。 でも、また症状が出ちゃって。で、開発環境をUbuntu PCに かえました。UbuntuのほうにもIDE 1.0が入ってるんで。 で、Ubuntuで仕切り直しになったんですけど、githubで公開 することを考えると、Collinさんのコードは別にしておいたほうが いいと思いました。でも、これでまたハマることに。 Arduino IDEは、コンパイラはg++なんですけど、簡単に プログラミングできるようにいろいろ小細工するんですよね。 自分が知ってるのだと、勝手に関数プロトタイプを挿入する せいで、グローバル変数にユーザ定義型を使えないというのが あります。 そんな感じで、ソースファイルの分割も試行錯誤の連続。結局 自力で解決できたからよかったものの、その解決策がなんで 解決策になってるかよくわからないという。 それと、Collinさんのコード、ちょっとおかしなとこがあって。 自分のgithubのソースでは直しときました。 まぁ、これだけやって何ができたかっていうと、CASIOかなんかの 安いキーボードのほうが全然よかったりするんですけどね。 でもいいのだ。自作って所詮そんなもんだし。 それにしてもCASIOの安いキーボードの安さは異常w
Copyright © 1905 tko at jitu.org