残りの3ビットを埋める。{Usb.Task();}Keyboardクラスは使わないいままで、Arduino付属のKeyboardライブラリに手を入れながら使ってきたのだけど、今回は必要な要素を拾い上げてスケッチ内に記述することにし、Keyboardクラスを使わないことにした。必要な要素は以下の4項目。前回作ったLEDレポートを受けるものをそのまま使う。変数keyReport)。使ってレポート記述データを登録。2.0との連携このライブラリはテンプレートのカタマリのような構造なので、読み解いていくのが面倒である。上で使ったサンプルスケッチと同じように、KeyboardReportParserクラスを継承したKeyboardEventクラスを定義し3つのvirtualメンバを実装した。呼んでMAX3421Eの状態との整合性を維持させるようにした。key)修飾キー以外の押下イベントを処理する。呼んでPCに通知する。modおよびkeyの内容をそのまま通知することになる。key)修飾キー以外のリリースイベントを処理する。呼んでPCに通知する。after)修飾キーが変化したときに呼ばれ、beforeに前回情報、afterに今回(呼び出し時)情報が格納されている。0);でそれぞれ通知している。OnKeyDown()とOnKeyUp()は修飾キー単独の押下時には呼ばれないので、たとえばGUIキー(Windowsキー)やAltキーのように、単独でWindowsデスクトップやアプリケーションに影響するキーのイベントを通知するために実装した。呼ばれるように書いた。悪影響はないと思うのだけど。)のみを更新して通知を行っている。きょうのまとめビルドして書き込んだところ、意図通りにふつうのキーボードとして動作した。動画や写真を載せるような話でもないだろう。Deleteというシーケンスから同じように使えた。簡単な応用例としては、キーボードの配列を変えるような処理が考えられる。OnKeyDown()とOnKeyUp()のそれぞれでキーコードを使ってテーブルを引き、テーブルの中身を通知に使えばいいだろう。その際、Shiftキーの状態を見たり操作したりするのがキモに思える。別のもうちょっと高度な応用例としては、複数のキーを同時に打鍵した際のタイミングに応じて文字を出し分けるような入力方式(nicola方式の親指同時打鍵入力など)への対応だろう。このあたりをやってみようかな。このスケッチをビルドしたときのメモリ使用状況は以下のようなものだった。12最大28672バイトのフラッシュメモリのうち、スケッチが13644バイト(47%)を使っています。最大2560バイトのRAMのうち、グローバル変数が466バイト(18%)を使っていて、ローカル変数で2094バイト使うことができます。ライブラリがフラッシュメモリをけっこう使っている。プログラム領域、データ領域ともにまだまだ余裕があるから、いろいろな応用に使えそうである。二階建てバージョンも作ってみました。小さくなるのと、ブレッドボード上の配線ワイヤが抜けたりする心配がないのがいいところ。スケッチをちょっと拡張して、配列変換するような仕組みも入れてみました。