テンキーとUSB-IO2.0を接続する方法ですが、このテンキーがサポートするMacのADBポートというインターフェース(シリアル通信らしい)の信号線をそのままUSB-IO2.0のI/Oポートに接続することは出来ません。
キーボードにはキーマトリックス回路というものが使われているのは何となく知っていたので調べてみたところ、テンキーをばらしてマトリックス回路の信号線を引き出してくればUSB-IO2.0のI/Oポートに直接つなぐことが出来るようです。
分解してみると、基盤にPICマイコンが載っているシンプルなものです。そこで半田ごてでPICと細かい部品をすべて取り除いて、テスターで導通を確認しながらマトリックスを調べてみると、8x3のマトリックス回路になっていてshiftとclearというキーだけ別に配線されていました。
USB-IO2.0は12ポートのうち4ポートにマトリックス回路に必要なプルアップ抵抗が内蔵されているので、上記の2つの特殊キーをジャンパー線でつなぎ8x4のマトリックスにして信号線を引き出すことにしました。
(基盤に半田付けした部分は保護のため100円ショップで購入したグルーガンの樹脂で固めてあります。)
早速、テンキーを元に戻してUSB-IO2.0と接続し、これをUSBでPCにつなげます。
これでやっとプログラムを作成するところまで漕ぎ着けました。動作確認のテストプログラムを作ってみましょう。
キーを押すとそのキートップの文字が表示されるだけのプログラムです。
需要はないかもしれませんがHidLibraryの使用例として参考になるかもしれませんので一応載せておきます。
ファイル: MainWindow.xaml
ファイル: MainWindow.xaml.cs
プログラムはC#でWindows10のVisual Studio 2015を使いました。プロジェクト名はUSBIOPadで、GUIはWPFを使用。gridにテキストボックスを載せただけの簡単なものです。
Visual Studioでプロジェクトを作成したらメニューのツール→Nuget パッケージマネージャー → パッケージマネージャーコンソールでコマンドプロンプトから
PM> Install-Package hidlibrary -Version 3.2.46
と入力してHidLibraryを取り込んでおきます。
テストプログラムが正常に動作したのでこのプログラムをベースに簡単な電卓アプリなども作ってみたのですが、ちょっと不満が…。
USB-IO2.0はI/Oポートの値を調べるのに、バックグラウンドでPCから定期的にコマンドを送ってポートの状態を確認しなければなりません。したがってテンキーに触っていないときでも常にCPUリソースを消費しています。バックグラウンド処理の割り込み時間の間隔を開ければPCの負担も減りますが、こんどはテンキーを押したときのキーの取りこぼしが目立ってきます。
この辺の兼ね合いをうまく調整する必要があるのですが、なんかイマイチです。やっぱりテンキーの場合はもっときちんとキーボードとして振る舞ってほしいものです。
実はそんな悩みを解決してくれるデバイスがあるんです。今回、キーボード関連をネットで調べているときによく目にしたのがArduino(アルドゥイーノ)と呼ばれるマイコンです。Arduinoはマイコンと様々な周辺デバイスをワンボードにしたもので、様々な種類のものがあります。その中にキーボードやマウス、ジョイスティックといったHIDデバイスになれるものがあるのです。
これを知って、どうしてもArduinoを使ってみたくなりました。
そんなわけで、次はArduinoに挑戦です。
※コメント投稿者のブログIDはブログ作成者のみに通知されます