Setup new keyboard definition for tutte_coxeter_36e

❯ qmk new-keyboard -kbtutte_coxeter_c36e -n "Peter J. A. Cock" -u peterjc -t RP2040 -l split_3x5_3
Ψ Generating a new QMK keyboard directory
Ψ Created a new keyboard called tutte_coxeter_36e.
Ψ Build Command: qmk compile -kb tutte_coxeter_36e -km default.
Ψ Project Location: /Users/peterjc/repositories/qmk_firmware/keyboards/tutte_coxeter_36e.
Ψ Now update the config files to match the hardware!

❯ mv ~/repositories/qmk_firmware/keyboardstutte_coxeter_36e  ~/repositories/qmk_userspace/keyboards

Note it did not want to accept hyphens, so used underscores.

Then define sparse 13x13 scanning matrix of 36 edge / 26 vertice graph,
using the RP2040 GPIO pin names.

i.e. The partial Tutte-Coxeter graph, using RP2040 GPIO pin names.
This commit is contained in:
Peter J. A. Cock 2025-06-12 14:07:14 +09:00
commit ceb1306308
3 changed files with 155 additions and 0 deletions

View file

@ -0,0 +1,96 @@
{
"manufacturer": "Peter J. A. Cock",
"keyboard_name": "tutte_coxeter_36e",
"maintainer": "peterjc",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": [
"GP11",
"GP10",
"GP3",
"GP4",
"GP7",
"GP26",
"GP27",
"GP28",
"GP15",
"GP21",
"GP19",
"GP20",
"GP16"
],
"rows": [
"GP12",
"GP8",
"GP9",
"GP1",
"GP6",
"GP1",
"GP6",
"GP2",
"GP22",
"GP0",
"GP13",
"GP14",
"GP18",
"GP17",
"GP5"
]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT_split_3x5_3": {
"layout": [
{"matrix": [1, 0], "label": "q", "x": 0, "y": 0.25},
{"matrix": [5, 1], "label": "w", "x": 1, "y": 0.125},
{"matrix": [7, 2], "label": "e", "x": 2, "y": 0},
{"matrix": [3, 3], "label": "r", "x": 3, "y": 0.125},
{"matrix": [5, 4], "label": "t", "x": 4, "y": 0.25},
{"matrix": [5, 5], "label": "y", "x": 7, "y": 0.25},
{"matrix": [7, 6], "label": "u", "x": 8, "y": 0.125},
{"matrix": [7, 7], "label": "i", "x": 9, "y": 0},
{"matrix": [3, 9], "label": "o", "x": 10, "y": 0.125},
{"matrix": [12, 11], "label": "p", "x": 11, "y": 0.25},
{"matrix": [9, 0], "label": "a", "x": 0, "y": 1.25},
{"matrix": [1, 1], "label": "s", "x": 1, "y": 1.125},
{"matrix": [3, 2], "label": "d", "x": 2, "y": 1},
{"matrix": [12, 3], "label": "f", "x": 3, "y": 1.125},
{"matrix": [4, 4], "label": "g", "x": 4, "y": 1.25},
{"matrix": [6, 5], "label": "h", "x": 7, "y": 1.25},
{"matrix": [0, 6], "label": "j", "x": 8, "y": 1.125},
{"matrix": [8, 7], "label": "k", "x": 9, "y": 1},
{"matrix": [9, 9], "label": "l", "x": 10, "y": 1.125},
{"matrix": [1, 11], "label": ";", "x": 11, "y": 1.25},
{"matrix": [0, 0], "label": "z", "x": 0, "y": 2.25},
{"matrix": [2, 1], "label": "x", "x": 1, "y": 2.125},
{"matrix": [2, 2], "label": "c", "x": 2, "y": 2},
{"matrix": [4, 3], "label": "v", "x": 3, "y": 2.125},
{"matrix": [8, 4], "label": "b", "x": 4, "y": 2.25},
{"matrix": [10, 5], "label": "n", "x": 7, "y": 2.25},
{"matrix": [6, 6], "label": "m", "x": 8, "y": 2.125},
{"matrix": [11, 7], "label": ",", "x": 9, "y": 2},
{"matrix": [10, 9], "label": ".", "x": 10, "y": 2.125},
{"matrix": [11, 11], "label": "/", "x": 11, "y": 2.25},
{"matrix": [9, 8], "label": "L1", "x": 2.5, "y": 3.25},
{"matrix": [8, 8], "label": "L2", "x": 3.5, "y": 3.5},
{"matrix": [12, 12], "label": "L3", "x": 4.5, "y": 3.75},
{"matrix": [6, 12], "label": "R3", "x": 6.5, "y": 3.75},
{"matrix": [10, 10], "label": "R2", "x": 7.5, "y": 3.5},
{"matrix": [11, 10], "label": "R1", "x": 8.5, "y": 3.25}
]
}
}
}

View file

@ -0,0 +1,27 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Q W E R T Y U I O P
*
* A S D F G H J K L ;
*
* Z X C V B N M , . /
*
*
* GUI Alt
* Bsp Ent
*
*
*/
[0] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LGUI, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, KC_RALT
)
};

View file

@ -0,0 +1,32 @@
# Tutte Coxeter 36e
![Partial Tutte-Coxeter Graph (26/30 vertices, 36/45 edges)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvS5QfAl7YotptMtpu0nG8XOHOsqG2vocUFF2sRgrn_QwAcUQNhDkctHt_42rQor3Bb5tbAW6FiOsYqv2craP086HMTuAqWk9U0A4yOeEsQkhyphenhyphenUxoayJWf5e-N3_Jg1TC1p9YAiVPTK02pEVCUu3hl72REIk5BAjXgZGoF7T-NWQ28iRirwFs6yzFzAe0/w200-h194/Screenshot%202025-05-28%20at%2014.59.35.png)
This is firmware for an PR2040 monoblock 36 key design (three rows of five, and three thumb keys, for each hand).
The first physical PCB for this is designed to fit in the [Gamma Omega keyboard](https://github.com/unspecworks/gamma-omega) case,
and use the same Raspberry Pi Pico based microcontroller board.
This is a diode-free design using a sparse 13 by 13 scanning matrix designed from a partial Tutte-Coxeter graph
(using only 26 vertices or GPIO pins with 36 edges or keys).
* Keyboard Maintainer: [Peter J. A. Cock](https://github.com/peterjc)
* Hardware Supported: Tutte Coxeter 36e (single PCB) with Raspberry Pi Pico
* Hardware Availability: https://github.com/peterjc/gamma-omega
Make example for this keyboard (after setting up your build environment):
make tutte_coxeter_36e:default
Flashing example for this keyboard:
make tutte_coxetter_36e:default:flash
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
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (bottom left key, Qwerty `z`) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available