2023-01-05

meishi2キーボードをカスタマイズしてレイヤー対応させてオンボードLEDも光らせてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

 前回、meishi2キーボードを買って、キーを押したら「こんにちは~~」と出るようにしてみたというエントリを書いてみました。

ちょっとカスタマイズを加えてみます。

キーが4つだと寂しいのでレイヤー機能を使って、もう少しいろんなことをできるようにします。そしてどのレイヤーになっているかわかるようにレイヤーの状態に応じてオンボードLEDを光らせます。

変更するのは、keymap.cで以下のように変更します。

-----------------
#include QMK_KEYBOARD_H

#define PRO_MICRO_LED_TX D5
#define PRO_MICRO_LED_RX B0

#define SW_DEF_LAY TO(_DEFAULT)
#define SW_MES_LAY TO(_MESSAGE)

//KC_Q,KC_W,KC_Eを指定していますが、使わないキーを適当に割り当てています
enum custom_keycodes {
    HASE = KC_Q,
    WATA = KC_W,
    NORI = KC_E,
};

enum meishi2_moc_layers {
    _DEFAULT,
    _MESSAGE
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_DEFAULT] = LAYOUT( /* Base */
    SW_MES_LAY, LCTL(KC_A), LCTL(KC_C), LCTL(KC_V)
  ),
  [_MESSAGE] = LAYOUT( /* Base */
    SW_DEF_LAY,HASE, WATA, NORI
  ),
};

void matrix_init_user(void) {
  setPinOutput(PRO_MICRO_LED_TX);
  writePinHigh(PRO_MICRO_LED_TX);
  setPinOutput(PRO_MICRO_LED_RX);
  writePinHigh(PRO_MICRO_LED_RX);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case HASE:
      if (record->event.pressed) {
        send_unicode_string("こんにちは~~");
      }
      return false;
      break;
    case WATA:
      if (record->event.pressed) {
        send_unicode_string("うるせ~よ");
      }
      return false;
      break;
    case NORI:
      if (record->event.pressed) {
        send_unicode_string("のりのりまさのり");
      }
      return false;
      break;
    case SW_DEF_LAY:
      if (record->event.pressed) {
        writePinHigh(PRO_MICRO_LED_TX);
        writePinHigh(PRO_MICRO_LED_RX);
      }
      break;
    case SW_MES_LAY:
      if (record->event.pressed) {
        writePinLow(PRO_MICRO_LED_TX);
        writePinLow(PRO_MICRO_LED_RX);
      }
      break;
  }
  return true;
}
-----------------

これで6つのキーが使えるようになりました。

そして、メッセージが出てくるレイヤーになっているときにはオンボードLEDが光るようになっています。