0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

自作キーボード lily58 proでレイヤーキーの同時押しを有効にする(QMK MSYSでキーマップをビルドする)

Posted at

経緯

5か月ほど前から、自作キーボード lily58 proを使っている。
wWohF9vwQeKslm-Kni7B8g (1).jpg

しかし、キーマップを remapで作成したところ、レイヤーキーの同時押しがうまくいかなかった。
remapは直感的にキーマップを編集することができる(しかも特別に環境構築等が必要ない)ので大変重宝していた。
しかし今回、どうしても同時押しで新しいレイヤーに移行できるようにしたかったので、重い腰を上げてバイナリをビルドした。

環境の構築

今回は、必要な環境としてQMK MSYSのみを使った。

バイナリのビルドから書き込みまで全部これ一つで行える。
なお、以下の環境構築はwindowsで行っている。

ダウンロードする
https://github.com/qmk/qmk_distro_msys/releases/tag/1.5.1
こちらからexeファイルをダウンロード。実行する。
インストールが完了したら、QMK MSYSを起動する。

セットアップを行う
起動して出てきたターミナルでqmk setupを実行する。
色々出てくるが、yを押せば自動的にファームウェアがクローンされる。
結構時間がかかるので注意。

これが終わるとqmk_firmwareというディレクトリが作成される。
特に何も指定していなければユーザー名\qmkfirmwareに配置される。

キーマップを編集する

qmk_firmware/keyboards内にキーボードごとにディレクトリが作成されている。
ここから、目的のキーボードのディレクトリを探し、好きなエディタで開く。
今回はvscodeでlily58を開いた。開くと画像のようになる。
lily58.PNG

keymapsフォルダ内に、キーマップが保存されている。
今回は画像のようにmykeymapという名前でコピーした。

コピーしたフォルダ内のkeymap.cを編集する。

copyed.PNG

プログラム上で、下のようにkeymapが宣言されているので、ここを編集する。

keymap.c
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ... }

今回は以下のように編集をした。
keymap.c
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

/* QWERTY
 * ,-----------------------------------------.                    ,-----------------------------------------.
 * |"半角"|   1  |   2  |   3  |   4  |   5  |                    |   6  |   7  |   8  |   9  |   0  |  "-" |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * | Tab  |   Q  |   W  |   E  |   R  |   T  |                    |   Y  |   U  |   I  |   O  |   P  |  "@" |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |LCTRL |   A  |   S  |   D  |   F  |   G  |-------.    ,-------|   H  |   J  |   K  |   L  |   ;  |  ":" |
 * |------+------+------+------+------+------|   [   |    |    ]  |------+------+------+------+------+------|
 * |LShift|   Z  |   X  |   C  |   V  |   B  |-------|    |-------|  "B" |  "N" |  "M" |  "," |  "." |RShift|
 * `-----------------------------------------/       /     \      \-----------------------------------------'
 *                   | LAlt |"LOWER"|"RShift" | /Space  /   \Enter \  |"RSHIFT"|"RAISE"| "RCTRL" |
 *                   |      |       |         |/       /     \      \ |        |       |         |
 *                   `----------------------------'           '------''--------------------'
 */

 [_QWERTY] = LAYOUT( \
  KC_ZKHK,   KC_1,   KC_2,    KC_3,    KC_4,    KC_5,                     KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, \
  KC_TAB,   KC_Q,   KC_W,    KC_E,    KC_R,    KC_T,                     KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, \
  KC_LCTRL, KC_A,   KC_S,    KC_D,    KC_F,    KC_G,                     KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
  KC_LSFT,  KC_Z,   KC_X,    KC_C,    KC_V,    KC_B, KC_LBRC,  KC_RBRC,  KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT,  KC_RSFT, \
                        KC_LALT, MO(_LOWER), KC_RSFT, KC_SPC, KC_ENT, KC_RSFT, MO(_RAISE), KC_RCTL \
),
/* LOWER
 * ,-----------------------------------------.                    ,-----------------------------------------.
 * |"ESC" | "F1" | "F2" | "F3" | "F4" | "F5" |                    | "F6" | "F7" | "F8" | "F9" | "\"  | "^"  |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |      |      | "F12"| "up" |"F14" |      |                    |      |      |      |      |      |  "[" |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |      |      |"left"|"down"|"right"|     |-------.    ,-------|      |      |"HOME"|      | "BS" |  "]" |
 * |------+------+------+------+------+------|   [   |    |    ]  |------+------+------+------+------+------|
 * |      |      |      |      |      |      |-------|    |-------|      |      | "END"|      |  "/" |  "\" |
 * `-----------------------------------------/       /     \      \-----------------------------------------'
 *                   |      |      |      | /       /       \      \  |      |      |      |
 *                   |      |      |      |/       /         \      \ |      |      |      |
 *                   `----------------------------'           '------''--------------------'
 */
[_LOWER] = LAYOUT( \
  KC_ESC,    KC_F1,  KC_F2, KC_F3,   KC_F4,   KC_F5,                   KC_F6, KC_F7, KC_F8, KC_F9, KC_INT3, KC_EQL,\
  _______, _______,  KC_F12, KC_UP,   KC_F14,   _______,               _______,   _______,   _______,  _______,  _______,  KC_RBRC, \
  _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,                _______, _______, KC_HOME, _______, KC_BSPC, KC_NUHS, \
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, _______, KC_SLSH, KC_INT1, \
                             _______, _______, _______, _______, _______,  _______, _______, _______\
),
/* RAISE
 * ,-----------------------------------------.                    ,-----------------------------------------.
 * |      |      |      |      |      |      |                    |      |      |      |      |      |      |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |   `  |      |      |      |      |      |                    |      |      |      |      |      |      |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |      |  "1" |  "2" |  "3" |  "4" | "5"  |-------.    ,-------| "6"  | "7"  | "8"  |  "9" |  "0" |      |
 * |------+------+------+------+------+------|   [   |    |    ]  |------+------+------+------+------+------|
 * |      |      |      |      |      |      |-------|    |-------|      |      |      |      |      |      |
 * `-----------------------------------------/       /     \      \-----------------------------------------'
 *                   |      |      |      | /       /       \      \  |      |      |      |
 *                   |      |      |      |/       /         \      \ |      |      |      |
 *                   `----------------------------'           '------''--------------------'
 */

[_RAISE] = LAYOUT( \
  _______, _______, _______, _______, _______, _______,                     _______, _______, _______, _______, _______, _______, \
  _______,  _______, _______ , _______ , _______ ,  _______,                 _______,  _______, _______, _______ , _______, _______, \
  _______,   KC_1 ,   KC_2 ,  KC_3  ,  KC_4   ,  KC_5  ,                      KC_6  , KC_7   , KC_8   , KC_9   ,KC_0    , _______, \
  _______,  _______,  _______, _______,  _______,  _______,   _______, _______,  _______, _______, _______,  _______, _______, _______, \
                             _______, _______, _______,  _______, _______,  _______, _______, _______ \
),
/* ADJUST
 * ,-----------------------------------------.                    ,-----------------------------------------.
 * |      |      |      |      |      |      |                    |      |      |      |      |      |      |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |      |      |      |      |      |      |                    |      |      |      |      |      |      |
 * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * |      |  !   |   "  |   #  |   $  |   %  |-------.    ,-------|   &  |  '   |   (  |  )   |      |      |
 * |------+------+------+------+------+------|       |    |       |------+------+------+------+------+------|
 * |      |      |      |      |      |      |-------|    |-------|      |      |      |      |      |      |
 * `-----------------------------------------/       /     \      \-----------------------------------------'
 *                   |      |      |      | /       /       \      \  |      |      |      |
 *                   |      |      |      |/       /         \      \ |      |      |      |
 *                   `----------------------------'           '------''--------------------'
 */
  [_ADJUST] = LAYOUT( \
  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  XXXXXXX, KC_EXLM, LSFT(KC_2), KC_HASH, KC_DLR  , KC_PERC,                   	LSFT(KC_6), LSFT(KC_7),LSFT(KC_8), LSFT(KC_9) , XXXXXXX, XXXXXXX, \
  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, KC_AMPR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
                             _______, _______, _______, _______, _______,  _______, _______, _______ \
  )
};



当然だが、_______, XXXXXXXは同じ数打たないとビルドするときにエラーが出る。
手打ちすると絶対に間違えるので気を付けよう。(15分ぐらい無駄にした。)


半年ほどFILCOの**Majestouch MINILA-R Convertible**を使っていたので、これに準ずるような配置にしている。

ホームポジションから手を動かさないでもカーソル移動ができるようになっているので、コーディングの時とても便利。
(HHKBでvim使えばよくない?って言われたら何も言えない。)

なお、日本語配列ライクに作っているので、記号等のキーコードが少し特殊になっている。
具体的には

キー キーコード
@, ` KC_LBRC
:, * KC_QUOT
\ KC_INT3
[, { KC_RBRC
], } KC_NUHS
/, _ KC_SLSH
" LSFT(KC_2)
& LSFT(KC_6)
' LSFT(KC_7)
( LSFT(KC_8)

などのようになっている(見づらくて申し訳ない...)

ちなみに、LSFT(KC_2)などLSFTがついているキーコードは、シフトキーと括弧内のキーが連続で入力されている。
(キーボード入力確認ソフトなどで見ると分かる。)

レイヤーキーの同時押し(ここではLOWERRAISE)をすると、ADJUSTのキーマップが反映される。

ビルド、そして書き込みを行う

ビルドするときは、

qmk compile -kb キーボード名 -km キーマップ名

で行える。今回はキーボードがlily58、 キーマップがmykeymapなので

qmk compile -kb lily58 -km mykeymap

という風にした。エラーがなければ.hexファイルがqmk_firmwareフォルダ内に作成される。

書き込みをするときは

qmk flash -kb キーボード名 -km キーマップ名

でOK。

よって

qmk flash -kb lily58 -km mykeymap

とする。
正常に書き込む準備ができたら、

QMK Firmware 0.14.16
Making lily58/rev1 with keymap mykeymap and target flash

avr-gcc.exe (GCC) 8.4.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
   text    data     bss     dec     hex filename
      0   22112       0   22112    5660 .build/lily58_rev1_mykeymap.hex

Copying lily58_rev1_mykeymap.hex to qmk_firmware folder                                             [OK]
Checking file size of lily58_rev1_mykeymap.hex                                                      [OK]
 * The firmware size is fine - 22112/28672 (77%, 6560 bytes free)
Waiting for USB serial port - reset your controller now (Ctrl+C to cancel).........

のように出力される。
ここでPro Microをリセットすれば書き込みが行われる。
(キーボードによるがリセットスイッチがついていればそれでOK。)

なお分割キーボードの場合、左と右両方のPro Microに書き込みを行わないといけないで注意。

まとめ、参考

これによって、ようやくレイヤーキーの同時押しを手に入れることができた。
今まではずらして押すことで何とか代用していたが、ミスが多かったので修正できてよかった。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?