前回、PC-E200キーボードをPS/2キーボードにしました。快適に使用できるものが出来ましたが、普段利用しているPS/2キーボードとの併用が出来ないので、これをUSBインターフェースにかえたいと思います。
ただしE200キーボードをUSBキーボードにするのではなく、E200はそのままでPS/2→USB変換を行うデバイスを作ってみようと考えました。以前から作成してみたいと思っていたのでちょうどいい機会ですし、他にPS/2キーボードやPS/2テンキーとかを所持しているので、PS/2インターフェースを持っていないraspberrypiとかAndroidなどにもつなげられたら便利そうだからです。
変換時のオーバーヘッドがどの程度になるのか見当つきませんが、前々回Digisparkを使ってあまりかんばしくない結果だったので、今回使用するマイコンはSparkFun ProMicro(互換機)にしてみます。
せっかくなのでE200だけでなく市販のPS/2キーボードをつないでも実用に耐えうるものにしたいところです。でも、Arduino標準のUSBキーボードライブラリを利用するのはちょっと問題があります。それは日本語キーボードに対応していないことと、CAPSやNumLockを押したときのキーボードLEDの点灯にも対応していないことです。
探せば良いUSBキーボードライブラリはたくさん見つかるのですが、上記の2つの問題を同時に解決できる使いやすいライブラリはなかなか見つかりません。
そこでArduino標準ライブラリを改変して、上記の問題を解決することにしました。日本語キーボード対応は難しくありませんが、LEDの点灯方法については見当もつかなかったのでこちらのサイトの情報をかなり参考にさせていただきました。
おかげでUSBインターフェースについてはなんとかなりそうです。PS/2インターフェースについてはこれまでも扱ってきたので大丈夫でしょう。
それでは製作に入ります。
ProMicroには前回と同様に秋月電子のミニDINコネクタピッチ変換キット(AE-MiniDIN-6)を取り付けました。
(使い古しの基板なのでProMicroの周りのパーツは無視してください)
接続端子は以下の通り。
PS/2 ⇔ ProMicro
1 DATA ⇔ 3
3 GND ⇔ GND
4 VCC ⇔ VCC
5 CLOCK⇔ 2
スケッチはこちら。
ProMicroPS2USB.ino
以下のファイルはスケッチと同じフォルダに入れておきます。
HID.h
HID.cpp
Keyboard.h
Keyboard.cpp
Ubuntuの環境で、このスケッチを書き込んだProMicroに市販のPS/2キーボードをつないでテストしてみましたが、特に遅延を感じること無くスムーズにキー入力できました。普通はPCにPS/2キーボードを接続するとPCから幾つか設定コマンドが送られますが、このスケッチではLEDの点灯コマンド以外のコマンドは送りません。それでもテストに使用したPS/2キーボードやPS/2テンキーから問題なくキー入力出来ました。
元々の目的であるPC-E200キーボードをつないだときの動作ですが、ターミナルやテキストエディタでテストしてみると全く問題なくキー入力できました。プロトコル変換時のオーバーヘッドも感じることなく、かなりスムーズに入力できます。そこでg800エミュレータで試してみたところ、こちらも何の問題もなく利用できました。もたつく感じもありません。
シューティングゲームでも自機がスムーズに動き、快適に遊ぶことが出来ました。
まさかここまでちゃんと動いてくれるとは意外でした。市販のPS/2→USB変換ケーブルも所持していますが、多少もたつく感じがあったので(PS/2マウスが同時接続できるためか?)どこまで実用的なものになるのか正直あまり期待はしていませんでしたが、作ってみるものですねぇ。
これならUSB機能のないAVRやPICでキーボードを好きなだけ作ってPC等につなげることが出来ます。特定のアプリケーションに特化したキーボードなんかも作れそうですし、ジョイスティックとかもキーボードに仕立てることができるので、PC-9801エミュレータなどで古いゲームをジョイスティックで遊ぶことも出来ますね。
ちょっと、PS/2キーボードに出来るものがないか探してみます。
最新の画像[もっと見る]
-
マイコン向けのロールプレイングゲームを作ってみた 3ヶ月前
-
マイコン向けのロールプレイングゲームを作ってみた 3ヶ月前
-
マイコン向けのロールプレイングゲームを作ってみた 3ヶ月前
-
マイコン向けのロールプレイングゲームを作ってみた 3ヶ月前
-
マイコン向けのロールプレイングゲームを作ってみた 3ヶ月前
-
マイコン向けのロールプレイングゲームを作ってみた 3ヶ月前
-
USBホスト機能を試してみる 5ヶ月前
-
USBホスト機能を試してみる 5ヶ月前
-
USBホスト機能を試してみる 5ヶ月前
-
Linino OneのDisk spaceを増やしてsambaを動かす 6ヶ月前
使ってみたいのですが
当方のノートパソコンNECVersaPro Win10ではスケッチが文字化けして分りません
普通のテキストでお願いできますか
ArduinoのスケッチはアーカイブするほどのサイズでもないのでArduino IDEのソースファイルをそのままアップしています。ソースファイルは文字コードがUTF-8で改行文字はLFのテキストファイルです。
Ubuntuで開発していますが、Windows 10のArduino IDEでもこのソースファイルをそのまま読み込んで使用できます。日本語の文字化けも起きません。
Arduino IDE以外のテキストエディタ等を使用するなら、テキストエンコードをUTF-8にすれば文字化けは起こらないと思います。必要なら改行文字もCRLFにしてください。
ブラウザでスケッチのリンクをクリックして表示すると漢字コードを誤認識して日本語が文字化けすることがありますが、エンコードをUnicodeに変えれば正しく表示されます。ちなみにスケッチをダウンロードするときは、リンクを右クリックして"名前を付けてリンク先を保存"といったメニューから保存するようにしてください。
試しにWindows 10のArduino IDE 1.8.15でこのブログからダウンロードしたスケッチを読み込んでみたところ、文字化けもなく普通にコンパイルできました。