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