それではHHKB向けのスケッチを作成しましょう。
やりたいことはここと同じで、OSのキーボード設定は日本語の状態でもHHKBの英語配列(主に記号)のキートップそのままに入力でき、かな入力のときに英語配列では入力出来ないかな文字も入力できるようにすることです。また、HHKBの右◇キーを半角/全角キーに、左◇キーを押すと自分で自由にカスタマイズしたキー配置に切り替るようにします。
キーボードから送られてくるスキャンコードは、1バイトのコードならキーテーブルを作成して読み出すようにすれば簡単に変換できるのですが、PS/2のスキャンコードは1バイトだけでなく複数バイトのものもあり単純ではありません。
また、今回のように記号文字を変換する場合に、同じコードでもシフトキーを押しながら入力しなければならないもの、シフトキーを離した状態で入力するものなどが混在していてかなりややこしくなります。
そこで方針として、コードが1バイトでシフトキーとの組み合わせに関係なく別のキーと置き換えることが出来るものはキーテーブルで変換し、それ以外の変換は力ずくですが変換対象のスキャンコードを拾って個別に処理していくことにしました。
コーディングはかなり面倒でしたが、なんとか作成したのがこのスケッチです。
HHKBLitePS2.ino
上記に上げた機能は全て盛り込んであります。左◇キーを押したときにはHJKLキーがカーソルキーに、QWEASDがテンキー(PCのテンキー配列とは逆で電話機の配列になってしまいました)に、YUIOPが日本語入力時に便利なようにF6〜F10(6〜0の数字キーはすでに記号変換の処理が行われていて使うのはややこしいのです)になります。
こんな変な配置のキーボードを使う人はいないと思いますが、キーボードのカスタマイズの参考ぐらいにはなると思いますのでスケッチを公開してみました。
このHHKBを使い続けるともう普通の日本語キーボードは使えなくなってしまいそうです。
ところで前回、スケッチの割り込みを7ピン(INT6)以外にすると入力キーの取りこぼしが発生すると投稿しました。今回のスケッチでは割り込み処理周りを見直して多少の修正を行ってみました。その結果Pro Microでは2ピン(INT1)や3ピン(INT0)でも取りこぼしが発生しない(今のところですが)ようです。しかしPro Miniでは頻度は減ったようですが、取りこぼしが発生してしまいました。
ライブラリの問題なのか使用しているAVRの違いからなのか分かりませんが、このスケッチではPro Miniの利用は難しそうです。仕方ないので以前もPS/2→USB変換に使用していたPro Microを今回もそのまま使用することにしました。前回同様◇キーを押したときのLED点灯もスケッチに追加しました。
結構手間がかかりましたが、やっと普通にキーボードとして使えるようになりました。昔は自分でキーボード変換器が作れるなんてことは考えたこともありませんでしたが、Arduinoのおかげで実現することが出来ました。
いやあ!Arduinoって本当に素晴らしいものですね。(©晴郎)
※コメント投稿者のブログIDはブログ作成者のみに通知されます