VIAやREMAPでエンコーダーに任意のキー操作を割り当てるテクニック
Assign any key operation to encoders by VIA or REMAP
QMKにはUSB通信でリアルタイムにキーボードの配列を変更するためのVIAというソフトウェアに対応するためのツールを組み込むことができます。さらに有志の開発した「
REMAP」というウェブサイトにアクセスすれば、特別なアプリをインストールすることなく、ブラウザだけでキー配置の書き換えが完結します。
VIA(REMAP)は、現時点でロータリーエンコーダーに対応しておらず、好みの操作を割り当てることができないように見えますが、QMK側でソフトウェアレベルで実装することによって、任意の操作を割り当てることができます。ここでは、架空のキースイッチをエンコーダーに割り振る方法について解説します。
こちらは、私が制作した自作キーボードに備え付けたロータリーエンコーダーです。このひとつエンコーダーを「2つのキースイッチ」と見なして、キーマップを配置します。
この場合、見かけ上のキースイッチの数は25個ですが、実際のキースイッチの数は21個です。回路図を見たらわかるように、5x5マトリックスキーボードに配線した場合、4つの未使用の交点ができるので、ロータリーエンコーダーの操作が行われたときは、残りの4つのキースイッチをシミュレートするようなプログラムを記述すれば良いのです。
keymap.c
bool encoder_update_user(uint8_t index, bool clockwise)
{
int col, row;
if(index != 1){ // Left(GPIO 18,19)
if (!clockwise) {
col = 3;
row = 0;
} else {
col = 4;
row = 0;
}
}else{ // Right(GPIO 20,21)
if (!clockwise) {
col = 4;
row = 3;
} else {
col = 4;
row = 4;
}
}
tap_code16(dynamic_keymap_get_keycode(get_highest_layer(layer_state), row, col));
return true;
}
このプログラムコードでは、エンコーダーが操作されて「encoder_update_user」がQMKから呼ばれたときに、対象のエンコーダーと回転方向(時計回りか否か)」によって、架空のキーとなっている箇所の行列を選択し、ユーザーによって変更されたキーマップのキーコードを取得する「dynamic_keymap_get_keycode」と、アクティブなレイヤーを取得する「get_highest_layer(layer_state)」によって、実行すべきキーコードを読み出し、キー操作のシミュレートを実行しています。
2022/10/29