前回の記事でポメラをHHKBにつなげる方法の方向性が決まったので、今回は使用するマイコンボードを選んで、どのようなプログラムを組んだらいいのか調べてみます。
Mbedやarduino、Raspberry Piなど、様々なワンボードマイコンを比較した結果、今回の工作には「arduino due」が最適と考え、それを使うことに決めました。
決め手は、まず、arduinoは書籍やネットなどに情報がたくさん公開されていて、マイコンボード初心者の私でも大抵のことは調べれば解決できること。
そして、arduino dueは、標準的なarduino unoなどと比べてGPIOピンが多いこと。
それから、arduino dueには、プログラムを書き込んだり、電源を供給したりするUSBポートの他に、もう一本、ネイティブUSBポートというUSBコネクターがあって、それがUSBホストとして使えることです。
そのポートがUSBホストとして使えるので、USBホストのシールドを買い足したり、USBホストのポートを作ったりする必要がありません。
しかも、そのUSBホストに繋いだキーボードやマウスを動かすライブラリも用意されていて、それらを簡単に扱うことが出来ます。
以上の点から、arduino dueを選びました。
さっそく購入してみます。
上の写真の通り、ボードを囲むように、ずらりとGPIOピンが並んでいました。
デジタル入出力ピンが54本、アナログ入力ピンが12本、アナログ出力ピンが2本あります。
この二つあるMicroUSBポートのうち、右がプログラミングポートで、左がUSBホストにもなるネイティブポートです。一番右は電源ジャックで、7V~12Vまでの電源が入力できます。
パソコンにIDEをインストールして、USBホストライブラリもインストールしました。
HHKBとarduinoは、スマートフォンなどで使っていたOTGケーブルで繋ぎます。
arduinoの公式リファレンスにあるUSBHostの項目から、さっそくサンプルのプログラム(arduinoではスケッチと呼ぶようです)を書き込んでみると、問題なく認識して、HHKBのキー入力を受け付けてくれました。
あとはリファレンスを読んで、HHKBをポメラと繋ぐためにどのようなスケッチを書いたらよいのか考えます。
リファレンスによると、USBHost にある「KeyboardController class」の中には、
keyPressed()
keyReleased()
getKey()
getModifiers()
getOemKey()
という関数がありました。
keyPressed()は、キーボードのキーが押されたときに働く関数。
keyReleased()はキーを放したときに働く関数。
getKey()は、押されたキーのASCIIコードを返す関数。
getModifiers()は、シフトキーやコントロールキーなどの、押されたmodifier keyを数値で返す関数。
getOemKey()は、押されたキーをOEMコードで返す関数とのこと。
そこで、keyPressed()関数でキーが押されたときに、getModifiers()とgetOemKey()でどのキーが押されたのかの数値を取得し、そのキーに対応したGPIOピンをHIGHにしてスイッチを入れる、という方法を基本にしてスイッチを書くことにしました。
GPIOピンからの信号は、前の記事で書いたアナログスイッチIC送られて、ポメラのキーボードを操作します。
実際のスケッチは、単純にSwitch文でパターン毎に振り分けます。
例えば、キーボードの「A」を押すと、「A」のOEMコードは「4」なので、Switch文の「4」の部分に15と24の二つの変数を代入します。15と24は、ポメラで「A」を押したときに繋がるラインの番号で、その二つのスイッチを開くGPIOピンに命令を出します。
具体的には、
void keyPressed() {
switch (keyboard.getOemKey()){
case 4:
line=15;
line1=24;
break;
というふうに条件分けしておいて、最後に
digitalWrite(line, HIGH);
digitalWrite(line1, HIGH);
として、キーボードで押されたキーを、ポメラのキーを押す動作に変換します。
digitalWriteは、GPIOのデジタル出力ピンに信号を送る命令です。
そして、キーを放したときに、
void keyReleased() {
digitalWrite(line, LOW);
digitalWrite(line1, LOW);
}
で、GPIOピンに送った信号を消します。
単純ですが、これをキースイッチの分繰り返せば、USBキーボードでポメラを動かせそうです。
スケッチ(プログラム)には目星がついたので、次回はアナログスイッチICを使って、arduinoとポメラを繋ぐ回路をブレッドボード上に組んで、実際に動作するのか実験したいと思います。
ポメラにHHKBをつなげる③に続きます。
<Sponsered Link>