mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-25 11:39:58 +02:00 
			
		
		
		
	Add The Mad Noodle Udon13 (#22704)
Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: jack <0x6a73@protonmail.com> Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
This commit is contained in:
		
							parent
							
								
									33c5a64b5a
								
							
						
					
					
						commit
						114a43e1ea
					
				
							
								
								
									
										6
									
								
								keyboards/themadnoodle/udon13/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								keyboards/themadnoodle/udon13/config.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | // Copyright 2023 Jesse Leventhal (@The=Mad-Noodle)
 | ||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + 5 | ||||||
							
								
								
									
										75
									
								
								keyboards/themadnoodle/udon13/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								keyboards/themadnoodle/udon13/info.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | |||||||
|  | { | ||||||
|  |     "manufacturer": "The Mad Noodle", | ||||||
|  |     "keyboard_name": "Udon13", | ||||||
|  |     "maintainer": "The-Mad-Noodle", | ||||||
|  |     "url": "https://www.madnoodleprototypes.com/", | ||||||
|  |     "bootloader": "atmel-dfu", | ||||||
|  |     "diode_direction": "ROW2COL", | ||||||
|  |     "features": { | ||||||
|  |         "bootmagic": true, | ||||||
|  |         "command": false, | ||||||
|  |         "console": false, | ||||||
|  |         "extrakey": true, | ||||||
|  |         "encoder": true, | ||||||
|  |         "mousekey": true, | ||||||
|  |         "nkro": true, | ||||||
|  |         "rgblight": true, | ||||||
|  |         "oled": true | ||||||
|  |     }, | ||||||
|  |     "rgblight": { | ||||||
|  |         "hue_steps": 10, | ||||||
|  |         "led_count": 6, | ||||||
|  |         "sleep": true, | ||||||
|  |         "animations": { | ||||||
|  |             "breathing": true, | ||||||
|  |             "rainbow_mood": true, | ||||||
|  |             "rainbow_swirl": true, | ||||||
|  |             "snake": true, | ||||||
|  |             "knight": true, | ||||||
|  |             "christmas": true, | ||||||
|  |             "static_gradient": true, | ||||||
|  |             "rgb_test": true, | ||||||
|  |             "alternating": true, | ||||||
|  |             "twinkle": true | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     "ws2812": { | ||||||
|  |         "pin": "B7" | ||||||
|  |     }, | ||||||
|  |     "matrix_pins": { | ||||||
|  |         "cols": ["F0", "F5", "F4", "F6"], | ||||||
|  |         "rows": ["F7", "F1", "D6", "D7"] | ||||||
|  |     }, | ||||||
|  |     "processor": "atmega32u4", | ||||||
|  |     "usb": { | ||||||
|  |         "device_version": "1.0.0", | ||||||
|  |         "pid": "0x0012", | ||||||
|  |         "vid": "0x6A6C" | ||||||
|  |     }, | ||||||
|  |     "layouts": { | ||||||
|  |         "LAYOUT": { | ||||||
|  |           "layout": [ | ||||||
|  |             {"label":"Encoder", "x":3, "y":0, "matrix": [0,3]}, | ||||||
|  |             {"x":0, "y":1, "matrix": [1,0]}, | ||||||
|  |             {"x":1, "y":1, "matrix": [1,1]}, | ||||||
|  |             {"x":2, "y":1, "matrix": [1,2]}, | ||||||
|  |             {"x":3, "y":1, "matrix": [1,3]},  | ||||||
|  |             {"x":0, "y":2, "matrix": [2,0]}, | ||||||
|  |             {"x":1, "y":2, "matrix": [2,1]}, | ||||||
|  |             {"x":2, "y":2, "matrix": [2,2]}, | ||||||
|  |             {"x":3, "y":2, "matrix": [2,3]},  | ||||||
|  |             {"x":0, "y":3, "matrix": [3,0]}, | ||||||
|  |             {"x":1, "y":3, "matrix": [3,1]}, | ||||||
|  |             {"x":2, "y":3, "matrix": [3,2]}, | ||||||
|  |             {"x":3, "y":3, "matrix": [3,3]} | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     "encoder": { | ||||||
|  |         "rotary": [ | ||||||
|  |             { "pin_a": "B6", "pin_b": "B5" } | ||||||
|  |         ] | ||||||
|  |      | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								keyboards/themadnoodle/udon13/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								keyboards/themadnoodle/udon13/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | // Copyright 2023 The Mad Noodle(@the_mad_noodle)
 | ||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
|  | 
 | ||||||
|  | #include QMK_KEYBOARD_H | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|  | 
 | ||||||
|  | /*Layer 0*/ | ||||||
|  |     [0] = LAYOUT( | ||||||
|  |         KC_MUTE, | ||||||
|  |         KC_MPLY, KC_MPRV, KC_MNXT, KC_MSEL,  | ||||||
|  |         KC_UNDO, KC_CALC, KC_MAIL, KC_MYCM,  | ||||||
|  |         KC_COPY, KC_CUT, KC_PSTE, TO(3) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | /*Layer 1*/ | ||||||
|  |     [1] = LAYOUT( | ||||||
|  |         RGB_TOG,  | ||||||
|  |         RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI,  | ||||||
|  |         RGB_MOD, RGB_RMOD, RGB_M_P, RGB_M_B,  | ||||||
|  |         RGB_M_SW, RGB_SPD, RGB_SPI, TO(0) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | /*Layer 2*/  | ||||||
|  |     [2] = LAYOUT( | ||||||
|  |         KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, TO(0) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | /*Layer 3*/        | ||||||
|  |     [3] = LAYOUT( | ||||||
|  |         KC_NO,  | ||||||
|  |         TO(1), TO(2), KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, TO(0) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /*Encoder Mapping*/ | ||||||
|  | #if defined(ENCODER_MAP_ENABLE) | ||||||
|  | const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { | ||||||
|  |     [0] =  {ENCODER_CCW_CW(KC_VOLD,  KC_VOLU)}, | ||||||
|  |     [1] =  { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, | ||||||
|  |     [2] =  { ENCODER_CCW_CW(KC_LEFT, KC_RGHT)}, | ||||||
|  |     [3] =  { ENCODER_CCW_CW(KC_DOWN,   KC_UP)}, | ||||||
|  |     | ||||||
|  | }; | ||||||
|  | #endif | ||||||
							
								
								
									
										2
									
								
								keyboards/themadnoodle/udon13/keymaps/default/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/themadnoodle/udon13/keymaps/default/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | ENCODER_MAP_ENABLE = yes | ||||||
|  | LTO_ENABLE = yes | ||||||
							
								
								
									
										52
									
								
								keyboards/themadnoodle/udon13/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								keyboards/themadnoodle/udon13/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | // Copyright 2023 The Mad Noodle(@the_mad_noodle)
 | ||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
|  | 
 | ||||||
|  | #include QMK_KEYBOARD_H | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|  | 
 | ||||||
|  | /*Layer 0*/ | ||||||
|  |     [0] = LAYOUT( | ||||||
|  |     KC_MUTE,  | ||||||
|  |         KC_MPLY, KC_MPRV, KC_MNXT, KC_MSEL,  | ||||||
|  |         KC_UNDO, KC_CALC, KC_MAIL, KC_MYCM,  | ||||||
|  |         KC_COPY, KC_CUT, KC_PSTE, TO(3) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | /*Layer 1*/ | ||||||
|  |     [1] = LAYOUT( | ||||||
|  |         RGB_TOG,  | ||||||
|  |         RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI,  | ||||||
|  |         RGB_MOD, RGB_RMOD, RGB_M_P, RGB_M_B,  | ||||||
|  |         RGB_M_SW, RGB_SPD, RGB_SPI, TO(0) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | /*Layer 2*/  | ||||||
|  |     [2] = LAYOUT( | ||||||
|  |         KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, TO(0) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | /*Layer 3*/        | ||||||
|  |     [3] = LAYOUT( | ||||||
|  |         KC_NO,  | ||||||
|  |         TO(1), TO(2), KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, KC_NO,  | ||||||
|  |         KC_NO, KC_NO, KC_NO, TO(0) | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /*Encoder Mapping*/ | ||||||
|  | #if defined(ENCODER_MAP_ENABLE) | ||||||
|  | const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { | ||||||
|  |     [0] =  {ENCODER_CCW_CW(KC_VOLD,  KC_VOLU)}, | ||||||
|  |     [1] =  { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, | ||||||
|  |     [2] =  { ENCODER_CCW_CW(KC_LEFT, KC_RGHT)}, | ||||||
|  |     [3] =  { ENCODER_CCW_CW(KC_DOWN,   KC_UP)}, | ||||||
|  |     | ||||||
|  | }; | ||||||
|  | #endif | ||||||
							
								
								
									
										3
									
								
								keyboards/themadnoodle/udon13/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								keyboards/themadnoodle/udon13/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | ENCODER_MAP_ENABLE = yes | ||||||
|  | LTO_ENABLE = yes | ||||||
|  | VIA_ENABLE = yes | ||||||
							
								
								
									
										27
									
								
								keyboards/themadnoodle/udon13/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								keyboards/themadnoodle/udon13/readme.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | # Udon:13 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | *The Udon:13 is a 12 hotswap key macro keypad with a push button encoder knob and 128x32 OLED display* | ||||||
|  | 
 | ||||||
|  | * Keyboard Maintainer: [The Mad Noodle](https://github.com/The-Mad-Noodle) | ||||||
|  | * Hardware Supported: Udon:13 PCB | ||||||
|  | * Hardware Availability: https://www.madnoodleprototypes.com/shop | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Compile example for this keyboard (after setting up your build environment): | ||||||
|  | 
 | ||||||
|  |     qmk compile -kb themadnoodle/udon13 -km default | ||||||
|  | 
 | ||||||
|  | Flashing example for this keyboard: | ||||||
|  | 
 | ||||||
|  |     qmk flash -kb themadnoodle/udon13 -km 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). | ||||||
|  | 
 | ||||||
|  | ## Bootloader & Flashing | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | **Physical reset button**:  | ||||||
|  | 
 | ||||||
|  | * Press the physical button located on the top left of the back of the PCB (Labeled RST) to enter Bootloader Mode | ||||||
							
								
								
									
										1
									
								
								keyboards/themadnoodle/udon13/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/themadnoodle/udon13/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | # This file intentionally left blank
 | ||||||
							
								
								
									
										76
									
								
								keyboards/themadnoodle/udon13/udon13.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								keyboards/themadnoodle/udon13/udon13.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | |||||||
|  | // Copyright 2023 The Mad Noodle(@the_mad_noodle)
 | ||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
|  | 
 | ||||||
|  | #include "quantum.h" | ||||||
|  | 
 | ||||||
|  | #ifdef OLED_ENABLE | ||||||
|  | 
 | ||||||
|  | /* OLED Settings */ | ||||||
|  | //------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  | static void render_logo(void) { // Render Mad Noodle logo
 | ||||||
|  |     static const char PROGMEM logo_1[] = {0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x04, 0x06, 0x82, 0xc3, 0x43, 0x61, 0xa1, 0xa1, 0xa1, 0xa1, 0x61, 0x43, 0xc3, 0x82, 0x06, 0x04, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00}; | ||||||
|  |     static const char PROGMEM logo_2[] = {0xf8, 0x1e, 0xc3, 0xf8, 0x5c, 0x76, 0x7b, 0x6d, 0x75, 0x55, 0x55, 0x75, 0x6d, 0x7b, 0x76, 0x5e, 0x7e, 0x77, 0x5b, 0x6d, 0x75, 0x55, 0x55, 0x75, 0x4d, 0x7b, 0x66, 0x5c, 0xf0, 0xc3, 0x3e, 0xf0}; | ||||||
|  |     static const char PROGMEM logo_3[] = {0x1f, 0x78, 0xc1, 0x0f, 0x38, 0xe0, 0xc0, 0x00, 0x00, 0x02, 0x0e, 0x0e, 0x8e, 0xc6, 0xc0, 0x40, 0x40, 0xc0, 0xc6, 0x8e, 0x0e, 0x0e, 0x02, 0x00, 0x80, 0xc0, 0x60, 0x38, 0x0f, 0xc0, 0x7c, 0x0f}; | ||||||
|  |     static const char PROGMEM logo_4[] = {0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, 0x31, 0x23, 0x66, 0x44, 0x44, 0xc4, 0xc4, 0x84, 0x84, 0x84, 0x84, 0xc4, 0xc4, 0x44, 0x46, 0x66, 0x23, 0x11, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00}; | ||||||
|  |     oled_set_cursor(0, 0); | ||||||
|  |     oled_write_raw_P(logo_1, sizeof(logo_1)); | ||||||
|  |     oled_set_cursor(0, 1); | ||||||
|  |     oled_write_raw_P(logo_2, sizeof(logo_2)); | ||||||
|  |     oled_set_cursor(0, 2); | ||||||
|  |     oled_write_raw_P(logo_3, sizeof(logo_3)); | ||||||
|  |     oled_set_cursor(0, 3); | ||||||
|  |     oled_write_raw_P(logo_4, sizeof(logo_4)); | ||||||
|  | } | ||||||
|  | //-----------
 | ||||||
|  | 
 | ||||||
|  | bool oled_task_kb(void) { | ||||||
|  |     if (!oled_task_user()) { return false; } | ||||||
|  |     render_logo(); | ||||||
|  |     oled_set_cursor(7, 0); | ||||||
|  |     oled_write_P(PSTR("The Mad Noodle"), false); | ||||||
|  | 
 | ||||||
|  |     oled_set_cursor(7, 1); | ||||||
|  |     oled_write_P(PSTR("Layer: "), false); | ||||||
|  | 
 | ||||||
|  |     /*
 | ||||||
|  |     To change LAYER NAMES displayed on the OLED ensure they are a total of 6 characters, including spaces. | ||||||
|  |     Example: | ||||||
|  |     --------------------------------------------------- | ||||||
|  |     case 0: | ||||||
|  |           oled_write_P(PSTR("Base  "), false); | ||||||
|  |           break; | ||||||
|  |     --------------------------------------------------- | ||||||
|  |     "B A S E *SPACE* *SPACE*" = 6 characters | ||||||
|  |     This would change layer 0 to Base on the OLED | ||||||
|  |     */ | ||||||
|  | 
 | ||||||
|  |     switch (get_highest_layer(layer_state)) { | ||||||
|  |         case 0: | ||||||
|  |             oled_write_P(PSTR("Zero  "), false); | ||||||
|  |             break; | ||||||
|  |         case 1: | ||||||
|  |             oled_write_P(PSTR("One   "), false); | ||||||
|  |             break; | ||||||
|  |         case 2: | ||||||
|  |             oled_write_P(PSTR("Two   "), false); | ||||||
|  |             break; | ||||||
|  |         case 3: | ||||||
|  |             oled_write_P(PSTR("Three "), false); | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |         default: | ||||||
|  |             oled_write_P(PSTR("N/A   "), false); | ||||||
|  |     } | ||||||
|  |     oled_set_cursor(7, 2); | ||||||
|  |     oled_write_P(PSTR("Status: "), false); | ||||||
|  |     oled_set_cursor(7, 3); | ||||||
|  |     led_t led_state = host_keyboard_led_state(); | ||||||
|  |     oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR("   "), false); | ||||||
|  |     oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR("   "), false); | ||||||
|  |     oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR("   "), false); | ||||||
|  | 
 | ||||||
|  |     return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jesse Leventhal
						Jesse Leventhal