summaryrefslogtreecommitdiffstats
path: root/docs/feature_encoders.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/feature_encoders.md')
-rw-r--r--docs/feature_encoders.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/docs/feature_encoders.md b/docs/feature_encoders.md
new file mode 100644
index 0000000000..6eab402ef9
--- /dev/null
+++ b/docs/feature_encoders.md
@@ -0,0 +1,52 @@
+# Encoders
+
+Basic encoders are supported by adding this to your `rules.mk`:
+
+ ENCODER_ENABLE = yes
+
+and this to your `config.h`:
+
+ #define NUMBER_OF_ENCODERS 1
+ #define ENCODERS_PAD_A { B12 }
+ #define ENCODERS_PAD_B { B13 }
+
+Each PAD_A/B variable defines an array so multiple encoders can be defined, e.g.:
+
+ #define ENCODERS_PAD_A { encoder1a, encoder2a }
+ #define ENCODERS_PAD_B { encoder1b, encoder2b }
+
+If your encoder's clockwise directions are incorrect, you can swap the A & B pad definitions.
+
+Additionally, the resolution can be specified in the same file (the default & suggested is 4):
+
+ #define ENCODER_RESOLUTION 4
+
+## Callbacks
+
+The callback functions can be inserted into your `<keyboard>.c`:
+
+ void encoder_update_kb(uint8_t index, bool clockwise) {
+ encoder_update_user(index, clockwise);
+ }
+
+or `keymap.c`:
+
+ void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ } else if (index == 2) {
+ if (clockwise) {
+ tap_code(KC_UP);
+ } else {
+ tap_code(KC_DOWN);
+ }
+ }
+ }
+
+## Hardware
+
+The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground.