Netflix 専用キーボードをもうちょっと改善。

気になるのは、ロータリーエンコーダー。 現在は、右・左回転に →/← カーソルを割り当てている。

Netflixの時はそれでもいいが、↑/↓ カーソルも使いときもある。 ということで動作を変えるたのめスイッチを導入。

Aliexpress 目測を誤った大きなスイッチ(キーキャップと同じくらい)を使うときが来た!

スイッチの配線

ロータリーエンコードが干渉するので、キースイッチをおけない一番右のスロットにぴったり。

スイッチを右にすると、配線がつながる(キーの押下)ように半田付け。

プログラム

一番右(1行目D列)をMODキーにする。

c
  [0] = LAYOUT( /* Base */

    // LEFT HAND
    KC_AUDIO_VOL_DOWN,  KC_SPC,   KC_AUDIO_VOL_UP,     MO(1),     KC_5,     XXXXXXX,    
    KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     XXXXXXX,
    KC_A,     KC_B,     KC_C,     KC_D,     KC_E,     XXXXXXX,

グローバル変数 layer_state を参照することで、MODキーの状態がわかる。

  • layer_state=0 : MODキーなし
  • layer_state=2 : MOD(1) 押下中
c
void encoder_update_user(uint8_t index, bool clockwise) {
    uprintf("EN: layer: %u, index: %u, clockwise: %u\n", layer_state, index, clockwise);
    if (layer_state == 0) {
        if (clockwise) {
            tap_code16(KC_LEFT);
        } else {
            tap_code16(KC_RIGHT);
        }
    } else {
        if (clockwise) {
            tap_code16(KC_UP);
        } else {
            tap_code16(KC_DOWN);
        }
    }
}

キーを押下しながら、ロータリーエンコーダーがまわすのはなんだかやりにくそうだったので、これで安心。