はじめに
HelixをMIDIコントローラー化させようとあくせくしていますが、ここで閑話休題。せっかくバックライトLEDが付いているんだから光らせたいなぁというところ。今回はQMKのLED機能を調べてみました。
HelixとQMK
概ねのことは記事参照です。
自作キーボードの中でも人気の高いキーボードで、通販だと遊舎工房さんから購入することができます。
キーボードのソフト部分であるQMK Firmwareはオープンソースのファームで自由に編集して好みのキーボードに作り変えることができます。キーボード入力の他にMIDIで送受信もできるため、自作MIDIデバイスとして扱うことができます。
このHelixですが、僕が購入したのはバックライトLED付きという、ボタンごとにLEDを光らせることのできるタイプ。
ですが、QMKに初めからはいっているのは1つ1つを光らせることはできず全体として色をつけたりアニメーション(色を時間で変える)させたりすることしかできません。
そのため、QMKファームウェアをいじってLEDを光らせていきましょう。
QMKのカスタマイズとLEDバックライト
基本的にカスタマイズは前回の続きなので、
qmk_firmware-master/keyboards/helix/rev2/keymaps/midi/
をいじっていきます。
QMKのバックライトの有効化
まず、LED周りのものを有効化させます。
qmk_firmware-master/keyboards/helix/rev2/keymaps/midi/rules.mkを開きます。
Helixには専用でLED周りがカスタマイズされており、QMKのLED機能のオンオフとは別にHelixのLED機能のオンオフがあります。基本的にHelixのLED機能を使うとQMK自身のLED機能も使うことになるので、HelixのLED_BACK_ENABLE = yes
でLED機能を有効化させれば良いと思います。
今回はQMKおよびHelixのLED機能のどちらをもyes
にさせています。
LEDバックライトの並び順の修正
バックライトのLEDチップですが、電気回路上の並び順とキーボードの並び順が違います。
LEDチップの制御順はPro Microに近いところからジグザグに回路がつながっています。キーボードは左上から順に番号を振りたいので、LEDの制御番号とキーボードの番号を合わせたくなります。LED 0から5や12から17、25から31を反転させてやります。
#define LED_LAYOUT( \
L00, L01, L02, L03, L04, L05, \
L06, L07, L08, L09, L10, L11, \
L12, L13, L14, L15, L16, L17, \
L18, L19, L20, L21, L22, L23, L24, \
L25, L26, L27, L28, L29, L30, L31 ) \
{ \
L05, L04, L03, L02, L01, L00, \
L06, L07, L08, L09, L10, L11, \
L17, L16, L15, L14, L13, L12, \
L18, L19, L20, L21, L22, L23, L24, \
L31, L30, L29, L28, L27, L26, L25 \
}
#define RGBLIGHT_LED_MAP LED_LAYOUT( \
0, 1, 2, 3, 4, 5, \
6, 7, 8, 9, 10, 11, \
12, 13, 14, 15, 16, 17, \
18, 19, 20, 21, 22, 23, 24, \
25, 26, 27, 28, 29, 30, 31 )
QMKのドキュメントのRGB Lightingのページをみるとやり方が載っています。
格子状になっているキーボードに関しては配列を使った方法を使うと楽とのことで、exampleにならってHelixのレイアウトに合わせて配列を変えていきます。
config.h内にLEDレイアウトに対して、キーボードの並び順、LEDの電気回路の並び順、実際に並べたいLEDの並び順を書いていきます。
keycap.cの編集
RGB Lightの宣言
#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
extern rgblight_config_t rgblight_config;
#endif
keycap.c内に、RGB Lightに必要な宣言をします。
カスタムキーコードの実行処理
sethsv(HSV_BLUE, (LED_TYPE *)&led[note]); // led on
rgblight_set();
sethsv(HSV_RED, (LED_TYPE *)&led[note]); // led off
rgblight_set();
//rgblight_init();
前回作ったカスタムキーマップにLED周りのものを追加します。カスタムキーマップに関しては前回の記事参照。
QMKのドキュメントのRGB Lightingのページに従って色の選択(sethsv()
)、発色(rgb_light_set()
)をさせます。またデフォルトカラーを設定してEEPROMに保存している場合は、rgblight_init()
を使っても良いですね。
今回はボタン押し込み(MIDI NOTE ON)でLEDが青に、離す(MIDI NOTE OFF)とLEDが赤になるようにしました。
もちろんこのカスタムキーマップを編集してやればLaunchPadのパフォーマンスみたいな流れるLED照明を作ることができますね。
まとめ
今回はLEDをキーボードに連動させてみました。
あとはOLEDの連動とMIDIコールバック(MIDI受け)ができれば実用的なMIDIコンになります。頑張ります。