見出し画像

ロータリーエンコーダーを搭載してみた話

タイトルの通り、初めてロータリーエンコーダーを搭載したマクロパッドを作ってみた際の備忘録を残します。

回路図

フォロワの皆様が沢山実例つきで教えてくださいました。本当にありがとうございます。その他にもオープンソースのキーボードの回路図を参考にしました。最終的に出来たのがこちら。

らてさんから紹介して頂いた記事を参考にチャタリング回避の回路を組み込んでいます。


qmkファームウェア

参考にしたURLをまとめておきます。
スイッチがついているエンコーダーの場合、エンコーダーの定義とは別に普通にkeymap.cにもスイッチとして定義が必要なんですね…(個人的なつまづきポイントでした)


info.json

実際のinfo.jsonファイルです。

features部分にencorder:true、 "encoder": { "rotary": の記載を加えました。


rules.mk

ENCODER_MAP_ENABLE = yes
この一行を加えればOKです。

keymap.c

この最後の部分が必要な記載になります。レイアウトのレイヤー数だけ定義が必要になります。

Vialファームウェア

基本的には公式ドキュメントを参考にすれば対応できます。


まず通常のvial化を行います。
(手順はこちらの記事を参考にしてください)
ロータリーエンコーダーを設定する場合はさらに下記が必要です。

rules.mk

vial内のrurles.mkに
ENCODER_MAP_ENABLE = yes
を記載します。

info.json

次にvial内のinfo.jsonを作るためにKLEを開きます。
エンコーダーは上に二つ分のキーを設定します。

赤部分でエンコーダー1つ分、緑部分でもう1つのエンコーダーになっています。
これはスイッチ搭載のエンコーダーを使用する例ですので、
他のタイプのエンコーダーを使用する際は別途公式ドキュメントを参考にしてください。

エンコーダーのダミーキーに設定しているものは他の実際に置くキー(row,col)の数字とは異なるものですので混同しないように注意が必要です。
ダミーキーは真ん中にeを記載します。ダミーキーの数字は(エンコーダーの数字,0)、(エンコーダーの数字,1)になります。

このままKLEでjsonを書き出すと

このようなデータが書き出されます。
ちなみに

  [    { "x": 0.25},
"0,0\n\n\n\n\n\n\n\n\ne",
 "0,1\n\n\n\n\n\n\n\n\ne",

 { "x": 1.5 },
"1,0\n\n\n\n\n\n\n\n\ne",
"1,1\n\n\n\n\n\n\n\n\ne"
]

この部分がエンコーダーの設定になっています。
通常のvial化と同じようにkeymapの部分全体をコピーしてinfo.jsonに貼り付けます。

この状態で書き出せばエンコーダー対応のVialファームウェアが完成します。

実際に完成するとこのようになります。
実物の写真