[Keyboard] Add Orthograph (#21770)

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Vlad Kvitnevskiy <vladkvit@outlook.com>
Co-authored-by: Your Name <you@example.com>
This commit is contained in:
Vlad K 2023-12-24 13:16:05 -05:00 committed by GitHub
parent b24bd2351a
commit 830ca0c415
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 426 additions and 0 deletions

View file

@ -0,0 +1,22 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define EE_HANDS // need to flash eeprom with eeprom-lefthand.eep for left, etc
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BAND_VAL
#define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
#define RGB_MATRIX_LED_COUNT 82

View file

@ -0,0 +1,226 @@
{
"keyboard_name": "Orthograph",
"url": "https://github.com/vladkvit",
"maintainer": "vladkvit",
"manufacturer": "vladkvit",
"build": {
"debounce_type": "asym_eager_defer_pk",
"lto": true
},
"debounce": 4,
"usb": {
"vid": "0x564B",
"pid": "0x0602",
"device_version": "1.0.0"
},
"features": {
"rgb_matrix": true,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"development_board": "elite_c",
"matrix_pins": {
"cols": ["B5", "B4", "D7", "C6", "D4", "D2", "D3", "F4"],
"rows": ["F5", "F6", "F7", "B1", "B3", "B2"]
},
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
"soft_serial_pin": "E6",
"transport": {
"sync_matrix_state": true
},
"usb_detect":{
"enabled": true
}
},
"rgb_matrix": {
"driver": "is31fl3733",
"split_count": [36, 46],
"layout": [
{"matrix":[0, 0], "flags":4, "x":0, "y":0},
{"matrix":[0, 1], "flags":4, "x":16, "y":0},
{"matrix":[0, 2], "flags":4, "x":32, "y":0},
{"matrix":[0, 3], "flags":4, "x":48, "y":0},
{"matrix":[0, 4], "flags":4, "x":64, "y":0},
{"matrix":[0, 5], "flags":4, "x":80, "y":0},
{"matrix":[1, 0], "flags":4, "x":0, "y":12},
{"matrix":[1, 1], "flags":4, "x":16, "y":12},
{"matrix":[1, 2], "flags":4, "x":32, "y":12},
{"matrix":[1, 3], "flags":4, "x":48, "y":12},
{"matrix":[1, 4], "flags":4, "x":64, "y":12},
{"matrix":[1, 5], "flags":4, "x":80, "y":12},
{"matrix":[2, 0], "flags":4, "x":0, "y":24},
{"matrix":[2, 1], "flags":4, "x":16, "y":24},
{"matrix":[2, 2], "flags":4, "x":32, "y":24},
{"matrix":[2, 3], "flags":4, "x":48, "y":24},
{"matrix":[2, 4], "flags":4, "x":64, "y":24},
{"matrix":[2, 5], "flags":4, "x":80, "y":24},
{"matrix":[3, 0], "flags":1, "x":0, "y":36},
{"matrix":[3, 1], "flags":4, "x":16, "y":36},
{"matrix":[3, 2], "flags":4, "x":32, "y":36},
{"matrix":[3, 3], "flags":4, "x":48, "y":36},
{"matrix":[3, 4], "flags":4, "x":64, "y":36},
{"matrix":[3, 5], "flags":4, "x":80, "y":36},
{"matrix":[4, 0], "flags":4, "x":0, "y":48},
{"matrix":[4, 1], "flags":4, "x":16, "y":48},
{"matrix":[4, 2], "flags":4, "x":32, "y":48},
{"matrix":[4, 3], "flags":4, "x":48, "y":48},
{"matrix":[4, 4], "flags":4, "x":64, "y":48},
{"matrix":[4, 5], "flags":4, "x":80, "y":48},
{"matrix":[5, 0], "flags":4, "x":0, "y":60},
{"matrix":[5, 1], "flags":4, "x":16, "y":60},
{"matrix":[5, 2], "flags":4, "x":32, "y":60},
{"matrix":[5, 3], "flags":4, "x":48, "y":60},
{"matrix":[5, 4], "flags":4, "x":64, "y":60},
{"matrix":[5, 5], "flags":4, "x":80, "y":60},
{"matrix":[6, 0], "flags":4, "x":96, "y":0},
{"matrix":[6, 1], "flags":4, "x":112, "y":0},
{"matrix":[6, 2], "flags":4, "x":128, "y":0},
{"matrix":[6, 3], "flags":4, "x":144, "y":0},
{"matrix":[6, 4], "flags":4, "x":160, "y":0},
{"matrix":[6, 5], "flags":4, "x":176, "y":0},
{"matrix":[6, 6], "flags":4, "x":192, "y":0},
{"matrix":[7, 0], "flags":4, "x":96, "y":12},
{"matrix":[7, 1], "flags":4, "x":112, "y":12},
{"matrix":[7, 2], "flags":4, "x":128, "y":12},
{"matrix":[7, 3], "flags":4, "x":144, "y":12},
{"matrix":[7, 4], "flags":4, "x":160, "y":12},
{"matrix":[7, 5], "flags":4, "x":176, "y":12},
{"matrix":[7, 6], "flags":4, "x":192, "y":12},
{"matrix":[7, 7], "flags":4, "x":208, "y":12},
{"matrix":[8, 0], "flags":4, "x":96, "y":24},
{"matrix":[8, 1], "flags":4, "x":112, "y":24},
{"matrix":[8, 2], "flags":4, "x":128, "y":24},
{"matrix":[8, 3], "flags":4, "x":144, "y":24},
{"matrix":[8, 4], "flags":4, "x":160, "y":24},
{"matrix":[8, 5], "flags":4, "x":176, "y":24},
{"matrix":[8, 6], "flags":4, "x":192, "y":24},
{"matrix":[8, 7], "flags":4, "x":208, "y":24},
{"matrix":[9, 0], "flags":4, "x":96, "y":36},
{"matrix":[9, 1], "flags":4, "x":112, "y":36},
{"matrix":[9, 2], "flags":4, "x":128, "y":36},
{"matrix":[9, 3], "flags":4, "x":144, "y":36},
{"matrix":[9, 4], "flags":4, "x":160, "y":36},
{"matrix":[9, 5], "flags":4, "x":176, "y":36},
{"matrix":[9, 6], "flags":4, "x":192, "y":36},
{"matrix":[10, 0], "flags":4, "x":96, "y":48},
{"matrix":[10, 1], "flags":4, "x":112, "y":48},
{"matrix":[10, 2], "flags":4, "x":128, "y":48},
{"matrix":[10, 3], "flags":4, "x":144, "y":48},
{"matrix":[10, 4], "flags":4, "x":160, "y":48},
{"matrix":[10, 5], "flags":4, "x":176, "y":48},
{"matrix":[10, 6], "flags":4, "x":192, "y":48},
{"matrix":[10, 7], "flags":4, "x":208, "y":48},
{"matrix":[11, 0], "flags":4, "x":96, "y":60},
{"matrix":[11, 1], "flags":4, "x":112, "y":60},
{"matrix":[11, 2], "flags":4, "x":128, "y":60},
{"matrix":[11, 3], "flags":4, "x":144, "y":60},
{"matrix":[11, 4], "flags":4, "x":160, "y":60},
{"matrix":[11, 5], "flags":4, "x":176, "y":60},
{"matrix":[11, 6], "flags":4, "x":192, "y":60},
{"matrix":[11, 7], "flags":4, "x":208, "y":60}
],
"animations": {
"alphas_mods": true,
"band_val": true,
"cycle_spiral": true
}
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "label":"Esc", "x":0.75, "y":0, "w":1.5},
{"matrix": [0, 1], "label":"F1", "x":2.25, "y":0},
{"matrix": [0, 2], "label":"F2", "x":3.25, "y":0},
{"matrix": [0, 3], "label":"F3", "x":4.25, "y":0},
{"matrix": [0, 4], "label":"F4", "x":5.25, "y":0},
{"matrix": [0, 5], "label":"F5", "x":6.25, "y":0},
{"matrix": [6, 0], "label":"F6", "x":12.5, "y":0},
{"matrix": [6, 1], "label":"F7", "x":13.5, "y":0},
{"matrix": [6, 2], "label":"F8", "x":14.5, "y":0},
{"matrix": [6, 3], "label":"F9", "x":15.5, "y":0},
{"matrix": [6, 4], "label":"F10", "x":16.5, "y":0},
{"matrix": [6, 5], "label":"F11", "x":17.5, "y":0},
{"matrix": [6, 6], "label":"F12", "x":18.5, "y":0},
{"matrix": [1, 0], "label":"~", "x":0.75, "y":1, "w":1.5},
{"matrix": [1, 1], "label":"1", "x":2.25, "y":1},
{"matrix": [1, 2], "label":"2", "x":3.25, "y":1},
{"matrix": [1, 3], "label":"3", "x":4.25, "y":1},
{"matrix": [1, 4], "label":"4", "x":5.25, "y":1},
{"matrix": [1, 5], "label":"5", "x":6.25, "y":1},
{"matrix": [7, 0], "label":"^", "x":12.5, "y":1},
{"matrix": [7, 1], "label":"&", "x":13.5, "y":1},
{"matrix": [7, 2], "label":"*", "x":14.5, "y":1},
{"matrix": [7, 3], "label":"(", "x":15.5, "y":1},
{"matrix": [7, 4], "label":")", "x":16.5, "y":1},
{"matrix": [7, 5], "label":"_", "x":17.5, "y":1},
{"matrix": [7, 6], "label":"+", "x":18.5, "y":1},
{"matrix": [7, 7], "label":"Backspace", "x":19.5, "y":1, "w":1.5},
{"matrix": [2, 0], "label":"Tab", "x":0.75, "y":2, "w":1.5},
{"matrix": [2, 1], "label":"Q", "x":2.25, "y":2},
{"matrix": [2, 2], "label":"W", "x":3.25, "y":2},
{"matrix": [2, 3], "label":"E", "x":4.25, "y":2},
{"matrix": [2, 4], "label":"R", "x":5.25, "y":2},
{"matrix": [2, 5], "label":"T", "x":6.25, "y":2},
{"matrix": [8, 0], "label":"Y", "x":12.5, "y":2},
{"matrix": [8, 1], "label":"U", "x":13.5, "y":2},
{"matrix": [8, 2], "label":"I", "x":14.5, "y":2},
{"matrix": [8, 3], "label":"O", "x":15.5, "y":2},
{"matrix": [8, 4], "label":"P", "x":16.5, "y":2},
{"matrix": [8, 5], "label":"{", "x":17.5, "y":2},
{"matrix": [8, 6], "label":"}", "x":18.5, "y":2},
{"matrix": [8, 7], "label":"|", "x":19.5, "y":2, "w":1.5},
{"matrix": [3, 0], "label":"Caps", "x":0.75, "y":3, "w":1.5},
{"matrix": [3, 1], "label":"A", "x":2.25, "y":3},
{"matrix": [3, 2], "label":"S", "x":3.25, "y":3},
{"matrix": [3, 3], "label":"D", "x":4.25, "y":3},
{"matrix": [3, 4], "label":"F", "x":5.25, "y":3},
{"matrix": [3, 5], "label":"G", "x":6.25, "y":3},
{"matrix": [9, 0], "label":"H", "x":12.5, "y":3},
{"matrix": [9, 1], "label":"J", "x":13.5, "y":3},
{"matrix": [9, 2], "label":"K", "x":14.5, "y":3},
{"matrix": [9, 3], "label":"L", "x":15.5, "y":3},
{"matrix": [9, 4], "label":":", "x":16.5, "y":3},
{"matrix": [9, 5], "label":"\"", "x":17.5, "y":3},
{"matrix": [9, 6], "label":"Enter", "x":18.5, "y":3, "w":2.25},
{"matrix": [4, 0], "label":"Shift", "x":0.75, "y":4, "w":1.5},
{"matrix": [4, 1], "label":"Z", "x":2.25, "y":4},
{"matrix": [4, 2], "label":"X", "x":3.25, "y":4},
{"matrix": [4, 3], "label":"C", "x":4.25, "y":4},
{"matrix": [4, 4], "label":"V", "x":5.25, "y":4},
{"matrix": [4, 5], "label":"B", "x":6.25, "y":4},
{"matrix": [10, 0], "label":"N", "x":12.5, "y":4},
{"matrix": [10, 1], "label":"M", "x":13.5, "y":4},
{"matrix": [10, 2], "label":"<", "x":14.5, "y":4},
{"matrix": [10, 3], "label":">", "x":15.5, "y":4},
{"matrix": [10, 4], "label":"?", "x":16.5, "y":4},
{"matrix": [10, 5], "label":"Shift", "x":17.5, "y":4, "w":1.5},
{"matrix": [10, 6], "label":"\u2191", "x":19, "y":4},
{"matrix": [10, 7], "label":"mx", "x":20, "y":4},
{"matrix": [5, 0], "label":"Ctrl", "x":1, "y":5, "w":1.25},
{"matrix": [5, 1], "label":"Win", "x":2.25, "y":5, "w":1.25},
{"matrix": [5, 2], "label":"Alt", "x":3.5, "y":5, "w":1.25},
{"matrix": [5, 3], "label":"Menu", "x":4.75, "y":5, "w":1.25},
{"matrix": [5, 4], "label":"space", "x":0, "y":4.75, "h":2},
{"matrix": [5, 5], "label":"fn", "x":1, "y":4.75, "h":2},
{"matrix": [11, 0], "label":"space2", "x":-2, "y":4.5, "h":2},
{"matrix": [11, 1], "label":"fn", "x":-1.0, "y":4.5, "h":2},
{"matrix": [11, 2], "label":"Alt", "x":14.25, "y":5, "w":1.25},
{"matrix": [11, 3], "label":"Win", "x":15.5, "y":5, "w":1.25},
{"matrix": [11, 4], "label":"Ctrl", "x":16.75, "y":5, "w":1.25},
{"matrix": [11, 5], "label":"\u2190", "x":18, "y":5},
{"matrix": [11, 6], "label":"\u2193", "x":19, "y":5},
{"matrix": [11, 7], "label":"\u2192", "x":20, "y":5}
]
}
}
}

View file

@ -0,0 +1,24 @@
{
"keyboard": "orthograph",
"keymap": "default",
"layout": "LAYOUT",
"layers":
[
[
"KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12",
"KC_GRAVE","KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC",
"KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS",
"KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_ENT",
"KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP", "KC_PSCR",
"KC_LCTL", "KC_LGUI", "KC_LALT", "KC_APP", "KC_SPC", "MO(1)", "KC_SPC", "MO(1)", "KC_RALT", "KC_RGUI", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"
],
[
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_INS", "KC_HOME", "KC_PGUP", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_DEL", "KC_END", "KC_PGDN", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "RGB_MODE_FORWARD","KC_TRNS", "RGB_TOG", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
]
]
}

View file

@ -0,0 +1,128 @@
/* Copyright 2023 vladkvit
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, A_6, B_6, C_6},
{0, A_5, B_5, C_5},
{0, A_4, B_4, C_4},
{0, A_3, B_3, C_3},
{0, A_2, B_2, C_2},
{0, A_1, B_1, C_1},
{0, D_6, E_6, F_6},
{0, D_5, E_5, F_5},
{0, D_4, E_4, F_4},
{0, D_3, E_3, F_3},
{0, D_2, E_2, F_2},
{0, D_1, E_1, F_1},
{0, G_6, H_6, I_6},
{0, G_5, H_5, I_5},
{0, G_4, H_4, I_4},
{0, G_3, H_3, I_3},
{0, G_2, H_2, I_2},
{0, G_1, H_1, I_1},
{0, A_14, B_14, C_14},
{0, A_13, B_13, C_13},
{0, A_12, B_12, C_12},
{0, A_11, B_11, C_11},
{0, A_10, B_10, C_10},
{0, A_9, B_9, C_9},
{0, D_14, E_14, F_14},
{0, D_13, E_13, F_13},
{0, D_12, E_12, F_12},
{0, D_11, E_11, F_11},
{0, D_10, E_10, F_10},
{0, D_9, E_9, F_9},
{0, G_14, H_14, I_14},
{0, G_13, H_13, I_13},
{0, G_12, H_12, I_12},
{0, G_11, H_11, I_11},
{0, G_10, H_10, I_10},
{0, G_9, H_9, I_9},
//----------------
{0, A_6, B_6, C_6},
{0, A_5, B_5, C_5},
{0, A_4, B_4, C_4},
{0, A_3, B_3, C_3},
{0, A_2, B_2, C_2},
{0, A_1, B_1, C_1},
{0, A_16, B_16, C_16},
// {0, A_15, B_15, C_15},
{0, D_6, E_6, F_6},
{0, D_5, E_5, F_5},
{0, D_4, E_4, F_4},
{0, D_3, E_3, F_3},
{0, D_2, E_2, F_2},
{0, D_1, E_1, F_1},
{0, D_16, E_16, F_16},
{0, D_15, E_15, F_15},
{0, G_6, H_6, I_6},
{0, G_5, H_5, I_5},
{0, G_4, H_4, I_4},
{0, G_3, H_3, I_3},
{0, G_2, H_2, I_2},
{0, G_1, H_1, I_1},
{0, G_16, H_16, I_16},
{0, G_15, H_15, I_15},
{0, A_14, B_14, C_14},
{0, A_13, B_13, C_13},
{0, A_12, B_12, C_12},
{0, A_11, B_11, C_11},
{0, A_10, B_10, C_10},
{0, A_9, B_9, C_9},
{0, A_8, B_8, C_8},
// {0, A_7, B_7, C_7},
{0, D_14, E_14, F_14},
{0, D_13, E_13, F_13},
{0, D_12, E_12, F_12},
{0, D_11, E_11, F_11},
{0, D_10, E_10, F_10},
{0, D_9, E_9, F_9},
{0, D_8, E_8, F_8},
{0, D_7, E_7, F_7},
{0, G_14, H_14, I_14},
{0, G_13, H_13, I_13},
{0, G_12, H_12, I_12},
{0, G_11, H_11, I_11},
{0, G_10, H_10, I_10},
{0, G_9, H_9, I_9},
{0, G_8, H_8, I_8},
{0, G_7, H_7, I_7}
};
#endif

View file

@ -0,0 +1,25 @@
# Orthograph
Split ortho keyboard with RGB backlighting
* Keyboard Maintainer: [vladkvit](https://github.com/vladkvit)
* Hardware Supported: Two PCBs + thin Pro Micro compatible boards (Elite C has been extensively tested). Boards with castellated holes (Elite C style) are much easier to install. Maximum thickness is around 3-3.5mm, so a stock Pro Micro (4mm) will not work.
* Hardware Availability: https://github.com/vladkvit/orthograph_keyboard for PCB, https://cad.onshape.com/documents/4f736d64448134c948af475a/w/ccab05fd44a7db98ce27216a/e/49ebfb6b27080b9b45bea74a?renderMode=0&uiState=64dd45dbc62cae486db10048 and https://cad.onshape.com/documents/5ff52821d2cb196f3db3d1e8/w/04b7cb21b748da89c8df31e6/e/486b72e32db97b2dfdf00af8 for the hardware
Make example for this keyboard (after setting up your build environment):
qmk compile -kb orthograph -km default
Flashing example for this keyboard:
qmk flash -kb orthograph -km default
Then, flash EEPROM with handedness (left / right) on both sides.
The reset button is on the underside of each half of the keyboard.
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View file

@ -0,0 +1 @@
# This file intentionally left blank