早押し判定やモグラ叩き的なゲームに使おうと100均の押すと点灯するルームライトを改造してシステムを作ってみています。

LEDが点灯する大きな早押しボタンを100均のルームランプで作ってみた

早押し判定用はともかく,モグラ叩き的なゲームにはもう少しボタンの数が多い方が良いと思い,I/Oエキスパンダーを使って8個のLEDと押しボタンをつないでみました。



早押し判定用の並びにしてチェックしたところです。
接続には手持ちのGroveコネクタ・コードを使っています。





モグラ叩き的なゲーム用の並びならこうなのかな,というところです。






[コントロール部の構成]
 前述のシステムとの変更は,Seeeduino-XIAOからI2C接続のI/Oエキスパンダー( MCP23017 )を介して入出力を増やした事です。

下図のようにエキスパンダのGPAを入力,GPBを出力に設定しています。




また,LEDドライバとして使っている手持ちのULN2003Aは7回路なので,1個追加しています。残りの回路は何かに使います(^^)。






[早押し判定用テストプログラム]
 テストプログラムとして簡単な判定用のものを作ってみました。

なお,I/OエキスパンダーMCP23017はI2Cのスレーブアドレス は0x20(7bit表記),設定に必要な内部レジスタは次の4つだけです。




初期設定部です。
I2Cの操作にWireライブラリを使っています。





メインのループ部です。




I2CのI/Oエキスパンダーの速度を調べた結果では,400KHzで1byteのデータを 送るのに80uSほどかかっていました。

ボタンが押されたのを検知するにはデータレジスタのアドレス書き込みをしてから読み込むので,,,ま,それでも200uS間隔ぐらいではポーリングできているのでは,と勝手に思っています。

「1万分の2秒ぐらいではチェックできてるから,,」と人に言っても良いですかね(^^;;;;;。

(追記)気になったので実際に計測してみると100uS間隔ぐらいで検知していました。アドレス書き込み後,falseで連続的に読み取っているので速いようです。
「1万分の1秒ぐらいではチェック」ですね。


考えてみれば早押し判定に使う事はそうそう多く無いでしょうから,自分のストレス解消用に切り替えればモグラ叩き的に使えるソフトを考えた方が良いでしょうね(^^)。