1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QMKで「error: 'ENCODERS_PAD_A' undeclared here (not in a function); did you mean 'ENCODER_ENABLE'?」と出る問題

Posted at

QMKファームウェアでコンパイル時にエラーが出る問題

前書き

  • 2024/2/7に発生し、対応した時の記事です。よって変更が入っている可能性はあります
  • 私はQMKにあまり詳しくありません、内容は間違っている可能性があります、文鎮化しても責任は取りません
  • sphh jpという名前のキーボードを使っています、自分の使っているキーボード名に読み替えてください
  • この方法で治るのはおそらく、ロータリーエンコーダーのついていないキーボードです
    • (ロータリーエンコーダー= ノブを回して音量調節とかするやつ)

qmk firmwareで 以下のようなコマンドでhexファイルを作っている人向けです

qmk compile -kb sphhjp/rev1 -km (キーマップ名)

エラー発生

一年振りくらい?にsphh jpのキーマップを変えようとした時に今までは出ていなかった下記のようなエラーが発生した。
おそらくqmk firmwareをアップデートした際に過去のものと何かが変わったのであろう

エラーメッセージ (一部抜粋)
Compiling: quantum/encoder.c                                                                       quantum/encoder.c:31:6: error: #error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B"
 #    error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B"
      ^~~~~
quantum/encoder.c:35:33: error: 'ENCODERS_PAD_A' undeclared here (not in a function); did you mean 'ENCODER_ENABLE'?
 static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
                                 ^~~~~~~~~~~~~~
                                 ENCODER_ENABLE
quantum/encoder.c:36:33: error: 'ENCODERS_PAD_B' undeclared here (not in a function); did you mean 'ENCODER_ENABLE'?
 static pin_t encoders_pad_b[] = ENCODERS_PAD_B;
                                 ^~~~~~~~~~~~~~
                                 ENCODER_ENABLE
quantum/encoder.c:36:33: error: invalid initializer
 [ERRORS]
 | 

解決方法

ファイル構成図の例
qmk_firmware
└─keybords
  └─sphhjp/rev1
    ├─rules.mk
    ├─config.h
    ├─keymaps/(省略)
    └─(省略)

rules.mk

rules.mk
ENCODER_ENABLE = no

を追加する。
(追加位置は多分どこでもいいけど、先頭はやめた方がいいと思う、私は末尾にする)


終わり


詳細について

内容のほとんどが予想です、ご注意ください

おそらく、ロータリーエンコーダー(ノブで回すやつ)周りの設定

ロータリーエンコーダーを使っていない場合は
昔は明確にrules.mkの書いていなくてもデフォルトでoffだったので問題なかったのだが、

rules.mkENCODER_ENABLE = noを明示しないと
config.h#define ENCODERS_PAD_A を探しに行ってしまいエラーになる

ようになった

余談だが、ロータリーエンコーダーを使っている場合は

rules.mkENCODER_ENABLE = yes
config.h#define ENCODERS_PAD_A {hoge}(など)

が定義されているはず

ロータリーエンコーダー設定 公式

検索するとこのような記事

[Bug] Using only right side encoder in split keyboard · Issue #10096 · qmk/qmk_firmware · GitHub

QMK Firmware with Rotary Encoder error : r/MechanicalKeyboards

機械翻訳

爆笑、3か月遅れましたが、文字通りまったく同じエラーに遭遇しました。 ENCODER_ENABLE = yes を rules.mk の一番下ではなく一番上に移動しました。 次に、ENCODERS_PAD_A と ENCODERS_PAD_B の定義に対しても同じことを行い、 これらの行を config.h の最後ではなく先頭に移動しました。コンパイルが完了しました:)

ここでは
rules.mkENCODER_ENABLE = yes
とあるが、これはロータリーエンコーダーを使っている場合なので今回は違う

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?