この記事はmbed Advent Calendar 2014 - Adventarの8日目の記事です。
コピペでチョッパヤ開発デバイスとして有名なmbedを使って、コピペするための専用ハードウェアを(ほとんど)コピペだけで作ってみましょう。
mbedの開発で使用するオンラインコンパイラでのコピペとは、主にライブラリを1クリックか2クリックで使用するプロジェクト内にインポートすることを指します。また、そのサンプルコードをフォーラムなどから入手し、自分のソースコードへコピペします。つまり、接続しているピンの定義やライブラリの間を繋ぐちょっとしたコードを足すだけであらゆるものを作れる環境が揃っています。(たぶん)
スイッチを配線してmbedに接続します。ピンはDigitalInできるところならどこでも構いません。
mbedオンラインコンパイラでのライブラリのインポートはとても簡単です。
実際にソースコードを書く場合はライブラリを1つずつ確認しながらの作業になります。
コピペ開発にはできるだけライブラリのAPIドキュメントが充実しているもの、サンプルコードが潤沢なものを選ぶ必要があります。
そうでない場合はライブラリのソースコードを読み解かなければいけません。
幸い今回利用するライブラリには詳細なドキュメントとサンプルコードがついています。
まずはサンプルコードをそれぞれ個別に自分の環境でコンパイルし、mbed上で動くことを確認します。
ハードウェア上で接続したピンを以下のように定数にします。
今後、ライブラリを試す上でこの定数を使用するとハードウェアとソフトウェアでの不整合を防げます。
#define SW_A D2 #define SW_B D3 #define SW_C D4
defineすると怒られるかもしれないけど便利なのでしちゃいます。
PinDetectのサンプルコードは変則的にライブラリ内にあります。
http://developer.mbed.org/users/AjK/code/PinDetect/file/cb3afc45028b/example.h
考えるのが面倒な場合はよく読まずにmain.cppに全てコピーしてピンの設定を変更してからコンパイルします。
PinDetect pin ( SW_A ); // スイッチのピンを指定する。 DigitalOut led1( LED1 ); // これ以下はテスト用のLEDです。 DigitalOut led2( LED2 ); // 使用しているボードによって書き換えること。 DigitalOut led3( LED3 ); DigitalOut led4( LED4 );
スイッチを押してピカピカとLEDが光れば動作しています。
しかし、KL25Zの場合、コンパイル時にエラーが出てしまいます。
このエラーはKL25ZのpinModeの指定にPullDownがないことに起因していますので、
エラーメッセージをダブルクリックして、該当の場所を開いて修正します。
// エラーメッセージをダブルクリックするとここが開きます // PinDetect.hの181行目あたり PinDetect(PinName p) { init( p, PullDown ); }
この部分を以下のように修正し、再度コンパイルします。
PinDetect(PinName p) { init( p, PullUp ); }
エラーを修正した場合は現在のプロジェクト内のライブラリのみが修正されます。
もし、ちゃんと動作の確認が出来た場合は元のライブラリのリポジトリへプルリクエストを送ると良いでしょう。(当然、他のプラットフォームのmbedでも修正後のライブラリで動作することを確認しなければなりません。)
USBDeviceの中のUSBKeyboardのサンプルコードをプログラムとしてインポートして試します。
http://developer.mbed.org/handbook/USBKeyboard
Import programからオンラインコンパイラを起動してコンパイル、転送して下さい。
もし、デバイス側のUSBケーブルを刺したままにしていると思いもよらぬところでキーボード入力されてしまうかもしれないので、
メモ帳などを立ち上げてそこにフォーカスを移してからデバイス側のUSBケーブルを差し込む方が安全です。
正常に動いていれば、PCの音量が下がったり勝手に文字入力されたりします。
全てのライブラリの動作確認が出来たら、全てのライブラリをインポートしてコードを書いていきます。ここまで来たらもう簡単です。あっちとこっちを組み合わせる部分だけを書きます。
もしかするとライブラリを同時に使用したことで何らかのエラーが出るかもしれません。そのときは諦めて他のライブラリを検索するか、ForumやQuestionで該当するものがないかどうか探してみましょう。
実際に書いたコードはこちらで公開しています。
公開の都合上、修正したPinDetectライブラリはフォルダに変換してあります。
http://developer.mbed.org/users/hsgw/code/USBCopyPasteKey/
コピペでチョッパヤプログラミングはmbed.org内での検索能力に秀でていなければいけません。そして、お行儀の悪いライブラリには全くコメントやドキュメントが書かれておらず、ソースコードそのものを読み解く必要もでてくるでしょう。もしかするとmbedライブラリやマイコン自体のデータシートまで調査する必要があるかもしれません。コピペの道は修羅の道です。
大人しく最初から書いたほうが良いことも多いですが、そのお手本にするためのコード資産がmbed.orgには集まりつつあります。利用しない手はありません。この機会にmbedはじめてみましょう!
次はkumar0001さんです。よろしくお願いします。
この記事はmbed Advent Calender 2014向けの記事です。
// 書いてる途中にこういうものが公開されているのを知りました。おもいっきり被りました。
// http://www.nicovideo.jp/watch/sm24956707
// 僕も以前こういうUSBデバイス作りました。
// http://www.nicovideo.jp/watch/sm19652615