Browse Source

[Keyboard] Added a simple 2x5 Keypad with 4 layers (#6699)

* Added new 2x5 Keypad with 3 LEDs to indicate the selected layer.  By Jonathan Cameron.

* Minor refactor from suggestions from qmk team

* Added

* Moved to 'handwired' directory

* Update readme.md

* Update readme.md

* Update readme.md

* Update keyboards/handwired/2x5keypad/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Switch to image offsite

* Moved image offsite

* Update keyboards/handwired/2x5keypad/keymaps/default/keymap.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/handwired/2x5keypad/2x5keypad.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Moved functions into .c file per suggestions

* Cosmetic

* Fixed function called, per suggestions.

* Update keyboards/handwired/2x5keypad/2x5keypad.h

Ok

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Moved LED functions to the top level since they can be used it various flavors

* Declare those moved LED functions!

* Update keyboards/handwired/2x5keypad/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>
Jonathan Cameron 5 years ago
parent
commit
2e521b509c

+ 25 - 0
keyboards/handwired/2x5keypad/2x5keypad.c

@@ -0,0 +1,25 @@
+#include "2x5keypad.h"
+
+
+void matrix_init_kb(void)
+{
+    matrix_init_user();
+
+    setPinOutput(RED_LED);
+    setPinOutput(BLUE_LED);
+    setPinOutput(GREEN_LED);
+}
+
+
+
+void turn_off_leds(void)
+{
+    writePinLow(RED_LED);
+    writePinLow(BLUE_LED);
+    writePinLow(GREEN_LED);
+}
+
+void turn_on_led(pin_t pin)
+{
+    writePinHigh(pin);
+}

+ 21 - 0
keyboards/handwired/2x5keypad/2x5keypad.h

@@ -0,0 +1,21 @@
+#pragma once
+
+#include "quantum.h"
+
+#define RED_LED D0
+#define BLUE_LED B5
+#define GREEN_LED B6
+
+
+#define LAYOUT( \
+	K00, K01, K02, K03, K04, \
+	K10, K11, K12, K13, K14  \
+) { \
+	{ K00,   K01,   K02,   K03,   K04 }, \
+	{ K10,   K11,   K12,   K13,   K14 }  \
+}
+
+
+
+void turn_off_leds(void);
+void turn_on_led(pin_t pin);

+ 56 - 0
keyboards/handwired/2x5keypad/config.h

@@ -0,0 +1,56 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x2020
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Jonathan Cameron
+#define PRODUCT         2x5keypad
+#define DESCRIPTION     2x5 Keypad
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 5
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B3, B2 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+/* DISABLED
+#define IS_COMMAND() ( \
+   get_mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+*/
+
+/* prevent stuck modifiers */
+
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif

+ 69 - 0
keyboards/handwired/2x5keypad/keymaps/default/keymap.c

@@ -0,0 +1,69 @@
+#include QMK_KEYBOARD_H
+
+#define WIN_TAB LGUI(KC_TAB)
+#define WIN_LOCK LGUI(KC_L)
+
+enum layers {
+  NORMAL_LAYER = 0,
+  MEDIA_LAYER,
+  TBD_LAYER2,
+  TBD_LAYER3
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [NORMAL_LAYER]=
+	LAYOUT(TO(1),    WIN_TAB, KC_HOME, KC_UP,   KC_END, 
+	       WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [MEDIA_LAYER]=
+	LAYOUT(TO(2),    KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU, 
+	       KC_TRNS,  KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
+
+    [TBD_LAYER2]=
+	LAYOUT(TO(3),    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+	       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+    [TBD_LAYER3]=
+	LAYOUT(TO(0),    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+	       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+
+
+/* DISABLED
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+	return true;
+}
+*/
+
+
+layer_state_t layer_state_set_user(layer_state_t state)
+{
+    turn_off_leds();
+
+    switch (biton32(state))
+    {
+    case NORMAL_LAYER:
+	break;
+
+    case MEDIA_LAYER:
+	turn_on_led(RED_LED);
+	break;
+
+    case TBD_LAYER2:
+	turn_on_led(BLUE_LED);
+	break;
+
+    case TBD_LAYER3:
+	turn_on_led(GREEN_LED);
+	break;
+	}
+    return state;
+}

+ 26 - 0
keyboards/handwired/2x5keypad/readme.md

@@ -0,0 +1,26 @@
+# 2x5keypad
+
+![2x5keypad](http://jmcameron.net/2x5keypad-small.jpg)
+
+This Keypad has 2 rows x 5 columns of keys. It has the top/default layer that
+has a few handy navigation keys as well as one dedicated key to cycle through
+the layers. The second layer has some media keys. The third and fourth layers
+are currently undefined (although I may use them for inserting accented French
+characters). The keypad also includes three LEDs that show which layer is
+active (no lit LEDs means the default layer).
+
+Keyboard Maintainer: [Jonathan Cameron](https://github.com/jmcameron)  
+
+Hardware:
+  * Key switch holes cut in blank piece of copper-clad project board
+  * Uses Kailh Box White switches with relegendable keycaps
+  * Chassis is three layers of wood
+  * Handwired
+  * Uses a Pro Micro
+  * Includes a reset switch accessible by a hole on the bottom
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/2x5keyapd:default
+
+See 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).

+ 13 - 0
keyboards/handwired/2x5keypad/rules.mk

@@ -0,0 +1,13 @@
+MCU = atmega32u4
+BOOTLOADER = caterina
+
+BOOTMAGIC_ENABLE = yes	# Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes	# Mouse keys
+EXTRAKEY_ENABLE = yes	# Audio control and System control
+CONSOLE_ENABLE= no	# Console for debug
+COMMAND_ENABLE = no     # Commands for debug and configuration
+SLEEP_LED_ENABLE = no   # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes	# USB Nkey Rollover -
+BACKLIGHT_ENABLE = no   # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no