ArduinoにはPS/2キーボードを接続するライブラリがオプションであるので実験してみた。
まずPS/2キーボードを接続するための治具。以前PS/2信号の観測用に作ったものを手直し。

Pin1(DATA)とPin5(CLK)について、10KΩでPin4(+5V)にプルアップ。ジャンパで設定可能。

ピンの番号は写真の通り。
PIN1→Arduino Pin2、PIN3→GND、PIN4→5V、PIN5→Arduino Pin3 に接続。
なお、キーボードのCLKを割り込みとして受け付けて処理するので、Arduino UNOの場合はPin3にしか接続できない。
ではPS/2キーボードのライブラリを設定してみる。Arduino IDEには標準では入っていないので自分で入れる必要がある。
ARDUINO PLAYGROUND - PS2Keyboard
ここを辿っていくと
PJRC Teensy PS2Keyboard Library
があるので、ここのPS2Keyboard.zip (ver2.3)をダウンロード。
展開すると以下のような構成になっている。
PS2Keyboard¥
keywords.txt
PS2Keyboard.cpp
PS2Keyboard.h
examples¥
international¥international.pde
Simple_test¥Simple_test.pde
このPS2KeyboardフォルダをそのままArduino IDEのlibrariesフォルダの下にコピーする。
Arduino IDEを立ち上げ、Simple_test.pdeを読み込む。
以下、スケッチを修正。
const int DataPin = 2;
const int IRQpin =3;
ビルドして転送が完了すると、キーボードの入力をターミナルに表示する。Arduino IDEのターミナルはウィンドウ右上の虫眼鏡みたいなアイコンをクリックすると出てくる。
シリアル通信を使っていると、USBケーブルを外したりするとArduino IDEからCOMポートが見えなくなってしまうらしい。この様な場合はWindowsを再起動して対処した。
さて、これで確認できるのはUSキーボード配列だが、ライブラリを見てみたら日本語キーボードにも簡単に対応させることができそうだ。すでにドイツ語キーボードの対応が入っているので、ここを参考にすればいけそうな感じ。
で、作ってみた。PS2Keyboard.cppとPS2Keyboard.hを以下と差し替える。
https://gist.github.com/2334909
使い方はスケッチ内で以下のようにする。
keyboard.begin(DataPin, IRQpin, PS2Keymap_Japanese);
これでPS/2キーボードが使えるようになった。ただしPS/2テンキーのみの製品は正しいコードが反映されなかったり、応答しなかったりしたので後で調査する。
ドイツ語配列を元に修正しているので、Altキー修飾はそのままでサボっている。気が向いたらカナにも対応したい。
チェックに使用したキーボード:
USキーボード Microsoft Natural Keyboard Elite
日本語キーボード SANWA SKB-108L 日本語108キーボード
PS/2テンキー IBM KeyPadIII P/N 79F6401 ×応答せず 、FUJITSU FMV-NTKB1 テンキーボード ×コード化け
まずPS/2キーボードを接続するための治具。以前PS/2信号の観測用に作ったものを手直し。

Pin1(DATA)とPin5(CLK)について、10KΩでPin4(+5V)にプルアップ。ジャンパで設定可能。

ピンの番号は写真の通り。
PIN1→Arduino Pin2、PIN3→GND、PIN4→5V、PIN5→Arduino Pin3 に接続。
なお、キーボードのCLKを割り込みとして受け付けて処理するので、Arduino UNOの場合はPin3にしか接続できない。
ではPS/2キーボードのライブラリを設定してみる。Arduino IDEには標準では入っていないので自分で入れる必要がある。
ARDUINO PLAYGROUND - PS2Keyboard
ここを辿っていくと
PJRC Teensy PS2Keyboard Library
があるので、ここのPS2Keyboard.zip (ver2.3)をダウンロード。
展開すると以下のような構成になっている。
PS2Keyboard¥
keywords.txt
PS2Keyboard.cpp
PS2Keyboard.h
examples¥
international¥international.pde
Simple_test¥Simple_test.pde
このPS2KeyboardフォルダをそのままArduino IDEのlibrariesフォルダの下にコピーする。
Arduino IDEを立ち上げ、Simple_test.pdeを読み込む。
以下、スケッチを修正。
const int DataPin = 2;
const int IRQpin =3;
ビルドして転送が完了すると、キーボードの入力をターミナルに表示する。Arduino IDEのターミナルはウィンドウ右上の虫眼鏡みたいなアイコンをクリックすると出てくる。
シリアル通信を使っていると、USBケーブルを外したりするとArduino IDEからCOMポートが見えなくなってしまうらしい。この様な場合はWindowsを再起動して対処した。
さて、これで確認できるのはUSキーボード配列だが、ライブラリを見てみたら日本語キーボードにも簡単に対応させることができそうだ。すでにドイツ語キーボードの対応が入っているので、ここを参考にすればいけそうな感じ。
で、作ってみた。PS2Keyboard.cppとPS2Keyboard.hを以下と差し替える。
https://gist.github.com/2334909
使い方はスケッチ内で以下のようにする。
keyboard.begin(DataPin, IRQpin, PS2Keymap_Japanese);
これでPS/2キーボードが使えるようになった。ただしPS/2テンキーのみの製品は正しいコードが反映されなかったり、応答しなかったりしたので後で調査する。
ドイツ語配列を元に修正しているので、Altキー修飾はそのままでサボっている。気が向いたらカナにも対応したい。
チェックに使用したキーボード:
USキーボード Microsoft Natural Keyboard Elite
日本語キーボード SANWA SKB-108L 日本語108キーボード
PS/2テンキー IBM KeyPadIII P/N 79F6401 ×応答せず 、FUJITSU FMV-NTKB1 テンキーボード ×コード化け