You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.2 KiB

  1. # エンコーダ
  2. <!---
  3. original document: 0.9.43:docs/feature_encoders.md
  4. git diff 0.9.43 HEAD -- docs/feature_encoders.md | cat
  5. -->
  6. 以下を `rules.mk` に追加することで基本的なエンコーダがサポートされます:
  7. ```make
  8. ENCODER_ENABLE = yes
  9. ```
  10. さらに、以下を `config.h` に追加します:
  11. ```c
  12. #define ENCODERS_PAD_A { B12 }
  13. #define ENCODERS_PAD_B { B13 }
  14. ```
  15. 各 PAD_A/B 変数は配列を定義するため、複数のエンコーダを定義することができます。例えば:
  16. ```c
  17. #define ENCODERS_PAD_A { encoder1a, encoder2a }
  18. #define ENCODERS_PAD_B { encoder1b, encoder2b }
  19. ```
  20. エンコーダの時計回りの方向が間違っている場合は、A と B のパッド定義を交換することができます。define を使って逆にすることもできます:
  21. ```c
  22. #define ENCODER_DIRECTION_FLIP
  23. ```
  24. さらに、エンコーダが各戻り止め(デテント)間に登録するパルス数を定義する解像度は、次のように定義できます:
  25. ```c
  26. #define ENCODER_RESOLUTION 4
  27. ```
  28. ## 分割キーボード
  29. 分割キーボードのそれぞれの側のエンコーダに異なるピン配列を使っている場合、右側のピン配列を以下のように定義することができます:
  30. ```c
  31. #define ENCODERS_PAD_A_RIGHT { encoder1a, encoder2a }
  32. #define ENCODERS_PAD_B_RIGHT { encoder1b, encoder2b }
  33. ```
  34. ## コールバック
  35. コールバック関数を `<keyboard>.c` に記述することができます:
  36. ```c
  37. bool encoder_update_kb(uint8_t index, bool clockwise) {
  38. if (!encoder_update_user(index, clockwise)) {
  39. return false;
  40. }
  41. }
  42. ```
  43. あるいは `keymap.c` に記述することもできます:
  44. ```c
  45. bool encoder_update_user(uint8_t index, bool clockwise) {
  46. if (index == 0) { /* First encoder */
  47. if (clockwise) {
  48. tap_code(KC_PGDN);
  49. } else {
  50. tap_code(KC_PGUP);
  51. }
  52. } else if (index == 1) { /* Second encoder */
  53. if (clockwise) {
  54. tap_code(KC_DOWN);
  55. } else {
  56. tap_code(KC_UP);
  57. }
  58. }
  59. return true;
  60. }
  61. ```
  62. ## ハードウェア
  63. エンコーダの A と B の線は MCU に直接配線し、C/common 線はグランドに配線する必要があります。