久しぶりにキーマップを変えようと思ったら、ソースコードのバックアップが消失していたため、復旧に5時間近くかかったので戒め。大体自分用のメモ。
ソースコード
やったことはこっちに上げてるんで参考になればどうぞ。
やりたかったこと
- レイヤーキー同時押しで
Adjust
レイヤーに移行したい - LED の色をセットしたい
やったこと
Adjust
レイヤーの調整
keymap.c
#define L_BASE 0
#define L_LOWER 2
#define L_RAISE 4
#define L_ADJUST 8
// 先にレイヤー状態を定義しておく
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[L_BASE] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, 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_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LALT, MO(L_LOWER), KC_SPC, KC_ENT, MO(L_RAISE), KC_RSFT
//`--------------------------' `--------------------------'
// ↑ ここがMO(1) みたいな形になっていたので修正
細かい説明は省略するが、QMK ではレイヤーの状態はビット演算で表される。レイヤーキー同時押しを有効にするため、レイヤー番号の値を修正する必要がある。
2. update_tri_layer()
を追加する
keymap.c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
update_tri_layer(L_LOWER, L_RAISE, L_ADJUST);
// ここを追加
if (record->event.pressed) {
set_keylog(keycode, record);
}
return true;
}
update_tri_layer()
を追加してやることにより、レイヤーキー同時押しを有効化できる。仕様については以下を参考されたし。
LED のアニメーション制御
セットアップ全般についてはこちらを参照
1. RGB_MATRIX
を有効化するため、rules.mk
を修正
rules.mk
MOUSEKEY_ENABLE = yes
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes
# ここを追加
# RGB_MATRIX_ENABLE = no
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
LTO_ENABLE = yes
# ファームウェアの容量を削減するために宣言
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = no
LTO_ENABLE = yes
2. config.h
を修正
- その上で、設定したいアニメーションを、
#define
にて宣言しておく - 今回の場合、
ENABLE_RGB_MATRIX_TYPING_HEATMAP
と宣言し、アニメーションを設定した。 - アニメーションについては以下を参考に
3. LEDの色を設定
-
config.h
を修正したのみだと、LEDは赤色にしか光らないのでデフォルトの色を設定
keymap.c
bool oled_task_user(void) {
rgb_matrix_sethsv(HSV_AZURE);
// ここで色を HSV 形式でセットしてやる
if (is_keyboard_master()) {
oled_render_keylog();
} else {
oled_render_logo();
}
return false;
}
-
rgb_matrix_sethsv()
にて色を設定する - この関数を呼び出す場所は特にこだわらなくても良い?
- rgb_matrix_set_color_all() なんかを使うとLEDが激しくちらつくので注意
- 色についてはこちらを参照
感想
バックアップはちゃんととろう。(戒め)
これで 3 台目組んでも大丈夫だね。