arduinoでPS/2キーボードのエミュレーションを行う その2
前回の続きです。
全てのキーについて対応しました。
Windows上のキー入力を全てキャプチャーしてそのキーに対応する
スキャンコードを送信するアプリをVBで作成しました。

IchigoJamのスクリーンエディタでのカーソルキーやBackSpace、ファンクションキー、
等の利用が出来ます。
Windows上でキャプチャー画面を見ながら、windowsのキーボード操作で
IchigoJamの全ての操作が可能です。

キー入力キャプチャーはこんな感じです。フォーカスが無くてもWindows上の全ての
キーボード操作をキャプチャーし、キーボードに対応するスキャンコードを
arduinoに送信します。
IchigoJamは、キーボードが繋がっていると思い込んで、キー入力に対応する処理を
行います。
これは、結構よい感じです。ちょっと大がかりな感じがしますが...
入力キーに対応するスキャンコードの変換をWindows側で行うようにしたので、
arduinoのプログラムは前回よりもシンプルになりました。
#include "ps2dev.h" PS2dev keyboard(3,2); int enabled =0; int code; void ack() { while(keyboard.write(0xFA)); } int keyboardcommand(int command) { unsigned char val; switch (command) { case 0xFF: ack(); while(keyboard.write(0xAA)!=0); break; case 0xFE: // Reset: キーボードリセットコマンド。正しく受け取った場合ACKを返す。その後キーボードはセルフテストを実行する。 ack(); break; case 0xF6: // set defaults: 起動時の状態へ戻す //enter stream mode ack(); break; case 0xF5: //disable data reporting: 起動時の状態へ戻し、キースキャンを停止する //FM enabled = 0; ack(); break; case 0xF4: //enable data reporting : キースキャンを開始する //FM enabled = 1; ack(); break; case 0xF3: //set typematic rate/delay : ack(); keyboard.read(&val); //do nothing with the rate ack(); break; case 0xF2: //get device id : ack(); keyboard.write(0xAB); keyboard.write(0x83); break; case 0xF0: //set scan code set ack(); keyboard.read(&val); //do nothing with the rate ack(); break; case 0xEE: //echo :キーボードが接続されている場合、キーボードはパソコンへ応答(ECHO Responce)を返す。 //ack(); keyboard.write(0xEE); break; case 0xED: //set/reset LEDs :キーボードのLEDの点灯/消灯要求。これに続くオプションバイトでLEDを指定する。 ack(); keyboard.read(&val); //do nothing with the rate ack(); break; } } void setup() { Serial.begin(115200); // send the keyboard start up while(keyboard.write(0xAA)!=0); } void loop() { unsigned char c; // PCからの送信データ uint8_t inkey; // シリアルポートからの取得文字コード if( (digitalRead(3)==LOW) || (digitalRead(2) == LOW)) { while(keyboard.read(&c)) ; keyboardcommand(c); } else { if (Serial.available()>0 ) { inkey = Serial.read(); keyboard.write(inkey); } } }
キー操作キャプチャーはちょっと危険(犯罪に利用できるという意味で)なので、
ソースは公開出来ません。
今回の実験で、
「PS/2インタフェースの入力デバイスを簡単に製作できそうだ」と
いう感覚をつかむことが出来ました。
関連記事
« 書籍「ボクのLPC810工作ノート」届きました | トップページ | IchigoJamで疑似グラフィックを使った画像の表示 »
「arduino」カテゴリの記事
- Freenove Mecanum ホイール カー キットを購入しました(2025.05.28)
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
「IchigoJam」カテゴリの記事
- Ichigojam Rが届きました(2021.02.05)
- β版 IchigoJam Rを予約注文しました(2021.01.23)
- IchigoJamのファームウェア 1.4.1が正式に公開されました(2019.12.10)
- 「ichigoツール」をGithubにて公開しました(2019.11.09)
- ichigojamのファームウェアを1.4b13にアップデートしました(2019.11.06)
« 書籍「ボクのLPC810工作ノート」届きました | トップページ | IchigoJamで疑似グラフィックを使った画像の表示 »

コメント