見出し画像

Aitendoの「I2Cキーバッドきっと」

I2Cキーバッドとは

I2Cで入力キーを取得できる4×4キーバッドです。これまで、アナログ電圧値式の3x4キーパッドを使っていましたが、下記の点が気になっていたので、調査のため購入してみました。

  • 16キーだと電圧幅が少なくて誤認識しそう(特に3.3vの場合)

  • 2キー以上の同時押しが取得できない

ハードウェアの所見

  • 基板サイズが微妙に半端
    切りのよい寸法でも良さそうですが、微妙に半端です。

  • キートップは別に購入が必要
    キーベースは付属します

  • ICはソケットなしの直付けハンダのほうが良いかも
    結構、高さを取るので、3Dプリンタ―でケースを作る場合、干渉しそうです。

  • ピンアサイン
    Groveと同じだとよかったのですが、まぁ順当なピンアサインです。

使用ライブラリ

  • Keypad
    キーパッド用の基本ライブラリです。下記のKeypad_I2Cから呼び出されますので、インストールが必要です。

  • Keypad_I2C
    I2Cインターフェイスキーパッドのライブラリです。使われるエキスパンダICによって複数あります。このキットだと、Keypad_I2Cで良さそうです。

M5StackとGrove

ESP32だとWireの規定値、G21(sda),G22(scl)につなげば、サンプルは動くはずです。Groveで使う場合は

TwoWire *jwire = &Wire1;  
…
 jwire->begin(26,32); // M5Atom

のように、ピン番号を指定する必要があります。M5Stackは、機種によってGroveで使用するGPIOが違いますので、調べてくだい。

キー認識と、同時押し検知

電圧式は抵抗分圧により押したキーを判別しますが、抵抗の精度のためか、1台ずづキャリブレーションをしないと、まともに使えませんでした。
このエキスパンダICを使った方式だと、そういうことがないので、安心感があります。

対応ライブラリには、getKeys関数があるので、2つ以上のキーの同時押しも検知できました。チャタリング対処もしてあるので、そのまま使えます。

ライブラリで気になった点

  • デフォルトコンストラクタがないので、改造しないと使いにくいかもしれません。

  • 物理キーとソフトキーの関係が分かりにくいです。とりあえず4x4=16キーの判別ができればよいので、その設定を下記に示します。

const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'0','1','2','3'},
{'4','5','6','7'},
{'8','9','A','B'},
{'C','D','E','F'}
};
// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = { 4, 5, 6, 7 }; //connect to the row pinouts of the keypad
byte colPins[COLS] = { 0, 1, 2, 3 }; //connect to the column pinouts of the keypad

90度や180度回転させて使う場合でも、パラメータ値をいじれば、なんとかなりそうです。

この記事が気に入ったらサポートをしてみませんか?