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 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
2014 1 2 3 4 5 6 7 8 9 10 11 12
2015 1 2 3 4 5 6 7 8 9 10 11 12
2016 1 2 3 4 5 6 7 8 9 10 11 12
2017 1 2 3 4 5 6 7 8 9 10

ホーム

2012年05月05日

そういえば、「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

本家Permlink


Copyright © 1905 tko at jitu.org

バカが征く on Rails