以前、ハードオフで衝動買いしたこのテンキー。ずっとほったらかしにしていましたが、Arduinoの使い方に慣れてきた今、テンキーとして復活させましょう。
テンキー内部の部品は全て取り去りキーマトリックス回路しか残っていないので、使用するArduinoは何でもいいのですが、今回はファミコンジョイスティックをUSBジョイスティックにで使用したArduino Pro Micro互換機を流用します。
接続はテンキーから引き出した8×4マトリックスの12本の線をそのままPro Microにつなぐだけです。
スケッチは以前USB-IO2.0との接続で作成したC#プログラムと考え方は同じで、4本の線をつないだピンはプルアップ(HIGH)&入力に、残りの8つのピンはスイッチのオンオフを知りたいピンをLOWに他のピンをHIGHにして、4つのピンの状態を読み取ります。
この手順をスケッチに書いてテストしてみると、押したキーを認識することが出来ました。割と簡単だったと喜んだのもつかの間、2つのキーの同時押しが認識できません。後から押したキーのオンオフが、最初に押していたキーのオンオフと誤認されてしまうのです。
キーマトリックス回路では、ややこしいことに3つ以上のキーを押すと電流が意図しない方向に流れて、押したキーを正しく判別できないらしい(詳しくはググってください。)のですが、2つのキーの同時押しは判別できるはず…。
なんどスケッチを確認しても分かりません。困ったときは、ネットで先人たちのお知恵を拝借するしかありません。
でも、調べてみてもキーボードを自作するような方々は、全てのキーのスイッチの間にダイオードを入れて3つ以上のキーの問題を回避しているのです。今回の問題の解決に適用するのはちょっと無理でした。
完全に行き詰まった感があったのですが、やはり世の中には奇特な人がいらっしゃいます。やっと見つけたこのサイトのスケッチサンプルが解決してくれました。なんとありがたいことでしょう。
どうやらArduinoの出力設定した8本のピンはスキャンしないピンをHIGHにしておくのではなく、入力設定にしておくらしいのです。なにやらハイインピーダンスにするということのようです。ウ~ン電子回路は奥が深い。またまだ勉強が足りません。
早速、自分のスケッチにこの方法を取り入れてみると、うまく行きました!きちんと2つのキーの同時押しに対応できました。
tenkeypad.ino
入力ピン 15, 14, 16, 10
出力ピン 18, 19, 4, 5, 6, 7, 8, 9 (2つのピン番号が離れているのは基盤上の配線の都合だけです。)
上記スケッチ自体は需要ないでしょうが、ピン数とマトリックスの数を変更すれば他のキーマトリックスのデバイスにも利用できるはずです。(clearキーとshiftキーの処理も削除してください。)
このスケッチを使ってみると、2キーどころか3キーまで同時押しが出来ています。これはMacテンキーのマトリックス回路が工夫されているということでしょうか?
ところで、Arduinoでテンキーを作るなら市販のテンキー購入した方が手っ取り早いというご意見もあるでしょう。でもArduinoのすごいところは、一回のキー入力でPCに文字列を送れる点です。つまり、好きなキーにどんなコマンドでも登録できてしまうのです。まさに、究極無敵のテンキーですね。
※コメント投稿者のブログIDはブログ作成者のみに通知されます