aboutsummaryrefslogtreecommitdiff
path: root/keyboards/dumbpad/v1x_dualencoder
diff options
context:
space:
mode:
authorAkshay <[email protected]>2022-04-10 12:13:40 +0100
committerAkshay <[email protected]>2022-04-10 12:13:40 +0100
commitdc90387ce7d8ba7b607d9c48540bf6d8b560f14d (patch)
tree4ccb8fa5886b66fa9d480edef74236c27f035e16 /keyboards/dumbpad/v1x_dualencoder
Diffstat (limited to 'keyboards/dumbpad/v1x_dualencoder')
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/config.h42
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/info.json16
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/keymaps/default/keymap.c135
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/readme.md87
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/rules.mk21
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/templates/keymap.c44
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.c69
-rw-r--r--keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.h30
8 files changed, 444 insertions, 0 deletions
diff --git a/keyboards/dumbpad/v1x_dualencoder/config.h b/keyboards/dumbpad/v1x_dualencoder/config.h
new file mode 100644
index 000000000..13f4785d8
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/config.h
@@ -0,0 +1,42 @@
1/*
2Copyright 2020 imchipwood
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define DEVICE_VER 0x0010
23
24/* Column/Row IO definitions */
25#define MATRIX_ROWS 4
26#define MATRIX_COLS 5
27#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
28#define MATRIX_COL_PINS { C6, D7, E6, B4, B5 }
29#define UNUSED_PINS
30
31/* Dual rotary encoders */
32#define ENCODERS_PAD_A { B2, D0 }
33#define ENCODERS_PAD_B { D4, D1 }
34
35/* Onboard LEDs */
36#define LED_00 B6
37#define LED_01 B1
38#define LED_02 B3
39
40/* Bootmagic - hold down rotary encoder pushbutton while plugging in to enter bootloader */
41#define BOOTMAGIC_LITE_ROW 3
42#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/dumbpad/v1x_dualencoder/info.json b/keyboards/dumbpad/v1x_dualencoder/info.json
new file mode 100644
index 000000000..3e4cffbc5
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/info.json
@@ -0,0 +1,16 @@
1{
2 "keyboard_name": "dumbpad/v1x_dualencoder",
3 "keyboard_folder": "dumbpad/v1x_dualencoder",
4 "url": "https://www.github.com/imchipwood/dumbpad",
5 "maintainer": "imchipwood",
6 "layouts": {
7 "LAYOUT": {
8 "layout": [
9 {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0},
10 {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1},
11 {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2},
12 {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}
13 ]
14 }
15 }
16}
diff --git a/keyboards/dumbpad/v1x_dualencoder/keymaps/default/keymap.c b/keyboards/dumbpad/v1x_dualencoder/keymaps/default/keymap.c
new file mode 100644
index 000000000..8e4f444ee
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/keymaps/default/keymap.c
@@ -0,0 +1,135 @@
1/* Copyright 2020 imchipwood
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19 /*
20 BASE LAYER
21 /-----------------------------------------------------`
22 | | 7 | 8 | 9 | Bkspc |
23 | |---------|---------|---------|---------|
24 | | 4 | 5 | 6 | Esc |
25 | |---------|---------|---------|---------|
26 | | 1 | 2 | 3 | Tab |
27 |-------------|---------|---------|---------|---------|
28 | Left mouse | TT(1) | 0 | . | Enter |
29 \-----------------------------------------------------'
30 */
31 [0] = LAYOUT(
32 KC_7, KC_8, KC_9, KC_BSPC,
33 KC_4, KC_5, KC_6, KC_ESC,
34 KC_1, KC_2, KC_3, KC_TAB,
35 KC_BTN1, TT(1), KC_0, LSFT_T(KC_DOT), KC_ENTER
36 ),
37 /*
38 SUB LAYER
39 /-----------------------------------------------------`
40 | | | | | Reset |
41 | |---------|---------|---------|---------|
42 | | | | | + |
43 | |---------|---------|---------|---------|
44 | | | | | - |
45 |-------------|---------|---------|---------|---------|
46 | LOCK | | | | = |
47 \-----------------------------------------------------'
48 */
49 [1] = LAYOUT(
50 _______, _______, _______, RESET,
51 _______, _______, _______, KC_KP_PLUS,
52 _______, _______, _______, KC_KP_MINUS,
53 KC_LOCK, _______, _______, _______, KC_EQL
54 ),
55};
56
57bool process_record_user(uint16_t keycode, keyrecord_t *record) {
58 // If console is enabled, it will print the matrix position and status of each key pressed
59/*
60#ifdef CONSOLE_ENABLE
61 uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
62#endif
63*/
64 return true;
65}
66
67void keyboard_post_init_user(void) {
68 // Customise these values to desired behaviour
69 // debug_enable = true;
70 // debug_matrix = true;
71 // debug_keyboard = true;
72 // debug_mouse = true;
73}
74
75bool encoder_update_user(uint8_t index, bool clockwise) {
76 /* Custom encoder control - handles CW/CCW turning of encoder
77 * Default behavior:
78 * left encoder:
79 * main layer:
80 * CW: move mouse right
81 * CCW: move mouse left
82 * other layers:
83 * CW: = (equals/plus - increase slider in Adobe products)
84 * CCW: - (minus/underscore - decrease slider in adobe products)
85 * right encoder:
86 * main layer:
87 * CW: colume up
88 * CCW: volume down
89 * other layers:
90 * CW: right arrow
91 * CCW: left arrow
92 */
93 if (index == 0) {
94 switch (get_highest_layer(layer_state)) {
95 case 0:
96 // main layer - move mouse right (CW) and left (CCW)
97 if (clockwise) {
98 tap_code(KC_MS_R);
99 } else {
100 tap_code(KC_MS_L);
101 }
102 break;
103
104 default:
105 // other layers - =/+ (quals/plus) (CW) and -/_ (minus/underscore) (CCW)
106 if (clockwise) {
107 tap_code(KC_EQL);
108 } else {
109 tap_code(KC_MINS);
110 }
111 break;
112 }
113 } else if (index == 1) {
114 switch (get_highest_layer(layer_state)) {
115 case 0:
116 // main layer - volume up (CW) and down (CCW)
117 if (clockwise) {
118 tap_code(KC_VOLU);
119 } else {
120 tap_code(KC_VOLD);
121 }
122 break;
123
124 default:
125 // other layers - right (CW) and left (CCW)
126 if (clockwise) {
127 tap_code(KC_RIGHT);
128 } else {
129 tap_code(KC_LEFT);
130 }
131 break;
132 }
133 }
134 return true;
135}
diff --git a/keyboards/dumbpad/v1x_dualencoder/readme.md b/keyboards/dumbpad/v1x_dualencoder/readme.md
new file mode 100644
index 000000000..b568351bf
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/readme.md
@@ -0,0 +1,87 @@
1# dumbpad v1.x dual-encoder
2
3![dumbpad](https://i.imgur.com/s69rdfA.png)
4
5## Single- vs Dual-Encoder Support
6
7The combined Cherry MX/encoder sockets allow single- and dual-encoder configurations.
8
9The only rule when using two encoders is that there cannot be two encoders on the left side at once, or two on the right side.
10This table shows where the encoders are in the switch grid ("X" for encoder, "s" for switch):
11
12| C0 | C1 | C2 | C3 | C4 |
13|:---:|:---:|:---:|:---:|:---:|
14| |__X__| s | s |__X__|
15| | s | s | s | s |
16| | s | s | s | s |
17|__X__|__X__| s | s |__X__|
18
19- The three encoders in columns C0 and C1 are connected to each other
20- The two encoders in column C4 are connected to each other
21
22So, if doing dual encoders, one must be in column C4 and the other in either C0 or C1. Three or more encoders will not work.
23
24The following sections describe the configurations that the default keymaps in QMK are designed for.
25
26### Single-Encoder (Default Configuration)
27
28In the default configuration, the encoder is in column 0, the bottom left corner below the Pro Micro. All other sockets are filled with switches.
29
30| C0 | C1 | C2 | C3 | C4 |
31|:---:|:---:|:---:|:---:|:---:|
32| | s | s | s | s |
33| | s | s | s | s |
34| | s | s | s | s |
35|__X__| s | s | s | s |
36
37![single encoder](https://i.imgur.com/8ZPz1gFl.jpg)
38
39### Dual-Encoder Bottom
40
41One dual-encoder configuration has encoders in the bottom two corners of the 4x4 grid, and switches in the rest of the grid. The socket in column 0 is left empty.
42
43| C0 | C1 | C2 | C3 | C4 |
44|:---:|:---:|:---:|:---:|:---:|
45| | s | s | s | s |
46| | s | s | s | s |
47| | s | s | s | s |
48| |__X__| s | s |__X__|
49
50![dual-encoder bottom](https://i.imgur.com/QCqKDMSl.jpg)
51
52### Dual-Encoder Top
53
54Another dual-encoder configuration has encoders in the top two corners of the 4x4 grid, and switches in the rest of the grid. The socket in column 0 is left empty.
55
56| C0 | C1 | C2 | C3 | C4 |
57|:---:|:---:|:---:|:---:|:---:|
58| |__X__| s | s |__X__|
59| | s | s | s | s |
60| | s | s | s | s |
61| | s | s | s | s |
62
63![dual-encoder top](https://i.imgur.com/Rq6ox2Ol.jpg)
64
65### No-Encoder
66
67You may also choose not to use any rotary encoders if you like!
68
69### Bill Of Materials
70
71- Cherry-style mechanical switches
72- EC11 rotary encoder with pushbutton (7-pin) - one or two depending on your desired configuration
73- 1n4148 diodes (thru hole) - one per switch and rotary encoder (if using clickable encoder(s))
74- 1x Arduino Pro Micro or pin-compatible ATmega32u4-based MCU
75- (optional) 3x 3mm LEDs
76- (optional) 3x 330 ohm resistors (for limiting current in LEDs)
77- (optional) 6mm SPST switch for resetting MCU
78
79* Keyboard Maintainer: [imchipwood](https://github.com/imchipwood)
80* Hardware repository: [dumbpad on github](https://github.com/imchipwood/dumbpad)
81* PCB Revisions Supported: v1.0_dual
82
83Make example for this keyboard (after setting up your build environment):
84
85 make dumbpad/v1x_dualencoder:default
86
87See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/dumbpad/v1x_dualencoder/rules.mk b/keyboards/dumbpad/v1x_dualencoder/rules.mk
new file mode 100644
index 000000000..af1925613
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/rules.mk
@@ -0,0 +1,21 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = caterina
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = yes # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
18AUDIO_ENABLE = no # Audio output
19
20ENCODER_ENABLE = yes
21KEY_LOCK_ENABLE = yes
diff --git a/keyboards/dumbpad/v1x_dualencoder/templates/keymap.c b/keyboards/dumbpad/v1x_dualencoder/templates/keymap.c
new file mode 100644
index 000000000..c602269ed
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/templates/keymap.c
@@ -0,0 +1,44 @@
1#include QMK_KEYBOARD_H
2const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {__KEYMAP_GOES_HERE__};
3
4
5bool encoder_update_user(uint8_t index, bool clockwise) {
6 if (index == 0) {
7 switch (get_highest_layer(layer_state)) {
8 case 0:
9 if (clockwise) {
10 tap_code(KC_MS_R);
11 } else {
12 tap_code(KC_MS_L);
13 }
14 break;
15
16 default:
17 if (clockwise) {
18 tap_code(KC_EQL);
19 } else {
20 tap_code(KC_MINS);
21 }
22 break;
23 }
24 } else if (index == 1) {
25 switch (get_highest_layer(layer_state)) {
26 case 0:
27 if (clockwise) {
28 tap_code(KC_VOLU);
29 } else {
30 tap_code(KC_VOLD);
31 }
32 break;
33
34 default:
35 if (clockwise) {
36 tap_code(KC_RIGHT);
37 } else {
38 tap_code(KC_LEFT);
39 }
40 break;
41 }
42 }
43 return true;
44}
diff --git a/keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.c b/keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.c
new file mode 100644
index 000000000..4ea402d80
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.c
@@ -0,0 +1,69 @@
1/* Copyright 2020 imchipwood
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "v1x_dualencoder.h"
17
18void keyboard_pre_init_kb(void) {
19 // Set LED IO as outputs
20 setPinOutput(LED_00);
21 setPinOutput(LED_01);
22 setPinOutput(LED_02);
23 keyboard_pre_init_user();
24}
25
26void shutdown_user() {
27 // Shutdown LEDs
28 writePinLow(LED_00);
29 writePinLow(LED_01);
30 writePinLow(LED_02);
31}
32
33layer_state_t layer_state_set_kb(layer_state_t state) {
34 // Layer LEDs act as binary indication of current layer
35 uint8_t layer = get_highest_layer(state);
36 writePin(LED_00, layer & 0b1);
37 writePin(LED_01, (layer >> 1) & 0b1);
38 return layer_state_set_user(state);
39}
40
41// Optional override functions below.
42// You can leave any or all of these undefined.
43// These are only required if you want to perform custom actions.
44
45void matrix_init_kb(void) {
46 // put your keyboard start-up code here
47 // runs once when the firmware starts up
48 uint8_t led_delay_ms = 80;
49 for (int i = 0; i < 2; i++) {
50 writePinHigh(LED_00);
51 writePinHigh(LED_01);
52 writePinHigh(LED_02);
53 wait_ms(led_delay_ms);
54 writePinLow(LED_00);
55 writePinLow(LED_01);
56 writePinLow(LED_02);
57 if (i < 1) {
58 wait_ms(led_delay_ms);
59 }
60 }
61
62 matrix_init_user();
63}
64
65void led_set_kb(uint8_t usb_led) {
66 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
67 writePin(LED_02, !IS_LED_ON(usb_led, USB_LED_NUM_LOCK));
68 led_set_user(usb_led);
69}
diff --git a/keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.h b/keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.h
new file mode 100644
index 000000000..b8bb84fe5
--- /dev/null
+++ b/keyboards/dumbpad/v1x_dualencoder/v1x_dualencoder.h
@@ -0,0 +1,30 @@
1/* Copyright 2020 imchipwood
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17#include "quantum.h"
18
19#define LAYOUT( \
20 k01, k02, k03, k04, \
21 k11, k12, k13, k14, \
22 k21, k22, k23, k24, \
23 k30, k31, k32, k33, k34 \
24) \
25{ \
26 { KC_NO, k01, k02, k03, k04 }, \
27 { KC_NO, k11, k12, k13, k14 }, \
28 { KC_NO, k21, k22, k23, k24 }, \
29 { k30, k31, k32, k33, k34 }, \
30}