HelixのLED連動

HelixのLED連動

はじめに

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コンになります。頑張ります。

電子工作カテゴリの最新記事