[Keyboard] For Science (#9607)

* Add a compiling layout based on minidox

* Add the correct pins

* Add old for science code

* Update to 2020 standards

* Get the keymap working

* update config

* Update pinout

* Fix pins

* Make requested changes

* Add info.json for configurator

* for science - PR comments

* Apply suggestions from code review
master
Jonathan Dayton 2020-08-26 11:55:18 -05:00 committed by GitHub
parent bad662b830
commit 2f9eb4cd22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 482 additions and 0 deletions

View File

@ -0,0 +1,78 @@
/*
Copyright 2017 Paul James (paul@peej.co.uk)
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
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xF22C
#define DEVICE_VER 0x0001
#define MANUFACTURER Peej
#define PRODUCT For Science
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 10
#define MATRIX_COLS 5
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
//#define MATRIX_ROW_PINS { F6, B1, B3, B2, B6 }
#define MATRIX_ROW_PINS { D4, D7, E6, B4, B5 }
//#define MATRIX_COL_PINS { D4, C6, D7, E6, B4 }
#define MATRIX_COL_PINS { F6, F7, B1, B3, B2 }
#define UNUSED_PINS
//#define USE_I2C
#define SOFT_SERIAL_PIN D0
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION ROW2COL
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
//#define MASTER_RIGHT
/* key combination for magic key command */
/* defined by default; to change, uncomment and set to the combination you want */
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

View File

@ -0,0 +1,16 @@
/* Copyright 2017 Paul James (paul@peej.co.uk)
*
* 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 "for_science.h"

View File

@ -0,0 +1,38 @@
/* Copyright 2017 Paul James (paul@peej.co.uk)
*
* 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
#include "quantum.h"
#define LAYOUT_split_4x5_3( \
L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \
LT1, LT2, LT3, RT1, RT2, RT3 \
) \
{ \
{ L00, L01, L02, L03, L04 }, \
{ L10, L11, L12, L13, L14 }, \
{ L20, L21, L22, L23, L24 }, \
{ L30, L31, L32, L33, L34 }, \
{ KC_NO, KC_NO, LT1, LT2, LT3 }, \
{ R04, R03, R02, R01, R00 }, \
{ R14, R13, R12, R11, R10 }, \
{ R24, R23, R22, R21, R20 }, \
{ R34, R33, R32, R31, R30 }, \
{ KC_NO, KC_NO, RT3, RT2, RT1 } \
}

View File

@ -0,0 +1,197 @@
{
"keyboard_name": "For Science",
"url": "https://github.com/peej/for-science-keyboard",
"maintainer": "qmk",
"width": 11.25,
"height": 5,
"layouts": {
"LAYOUT_split_4x5_3": {
"layout": [
{
"x": 0,
"y": 0
},
{
"x": 1,
"y": 0
},
{
"x": 2,
"y": 0
},
{
"x": 3,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 6.25,
"y": 0
},
{
"x": 7.25,
"y": 0
},
{
"x": 8.25,
"y": 0
},
{
"x": 9.25,
"y": 0
},
{
"x": 10.25,
"y": 0
},
{
"x": 0,
"y": 1
},
{
"x": 1,
"y": 1
},
{
"x": 2,
"y": 1
},
{
"x": 3,
"y": 1
},
{
"x": 4,
"y": 1
},
{
"x": 6.25,
"y": 1
},
{
"x": 7.25,
"y": 1
},
{
"x": 8.25,
"y": 1
},
{
"x": 9.25,
"y": 1
},
{
"x": 10.25,
"y": 1
},
{
"x": 0,
"y": 2
},
{
"x": 1,
"y": 2
},
{
"x": 2,
"y": 2
},
{
"x": 3,
"y": 2
},
{
"x": 4,
"y": 2
},
{
"x": 6.25,
"y": 2
},
{
"x": 7.25,
"y": 2
},
{
"x": 8.25,
"y": 2
},
{
"x": 9.25,
"y": 2
},
{
"x": 10.25,
"y": 2
},
{
"x": 0,
"y": 3
},
{
"x": 1,
"y": 3
},
{
"x": 2,
"y": 3
},
{
"x": 3,
"y": 3
},
{
"x": 4,
"y": 3
},
{
"x": 6.25,
"y": 3
},
{
"x": 7.25,
"y": 3
},
{
"x": 8.25,
"y": 3
},
{
"x": 9.25,
"y": 3
},
{
"x": 10.25,
"y": 3
},
{
"x": 2,
"y": 4
},
{
"x": 3,
"y": 4
},
{
"x": 4,
"y": 4
},
{
"x": 6.25,
"y": 4
},
{
"x": 7.25,
"y": 4
},
{
"x": 8.25,
"y": 4
}
]
}
}
}

View File

@ -0,0 +1,113 @@
/* Copyright 2017 Paul James (paul@peej.co.uk)
*
* 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 QMK_KEYBOARD_H
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_BASE,
_LAYER,
_MOD_LAYER,
_FUNCT
};
#define SFT_A SFT_T(KC_A)
#define SFT_F1 SFT_T(KC_F1)
#define SFT_Z SFT_T(KC_Z)
#define SFT_F6 SFT_T(KC_F6)
#define LAY_X LT(_LAYER, KC_X)
#define LAY_F7 LT(_LAYER, KC_F7)
#define LAY_SLS LT(_LAYER, KC_SLSH)
#define LAY_SPC LT(_LAYER, KC_SPACE)
#define LOCK LGUI(KC_L)
#define MAC_LCK LGUI(LCTL(KC_Q))
#define LAYER MO(_LAYER)
#define FUNCT MO(_FUNCT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ,---------------------------------------- ----------------------------------------.
* | Tab | Esc | ( | { | [ | | ] | } | ) | ' | BkSp |
* | ~ | ` | < | _ | - | | + | = | > | \ | Del |
* |-------+-------+-------+-------+-------+ |-------+-------+-------+-------+-------|
* | Q | W | E | R | T | | Y | U | I | O | P |
* | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
* |-------+-------+-------+-------+-------+ |-------+-------+-------+-------+-------|
* | A | S | D | F | G | | H | J | K | L | Enter |
* | F1 | F2 F3 | F4 | F5 | | PgUp | Home | Up | End | ; |
* |-Shift-+-------+-------+-------+-------+ |-------+-------+-------+-------+-------|
* | Z | X | C | V | B | | N | M | , | . | / |
* | F6 | F7 | F8 | F9 | F10 | | PgDn | Left | Down | Right | |
* `-Shift---Layer-+-------+-------+-------+ |-------+-------+-------+---------Layer-'
* | Ctrl | Gui | Alt | | Space | Layer | Shift |
* | | | | | Funct | | |
* `------------------------ `-Layer-----------------'
*/
[_BASE] = LAYOUT_split_4x5_3(
KC_TAB, KC_ESC, KC_LPRN, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, KC_RPRN, KC_QUOT, KC_BSPC,
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
SFT_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
SFT_Z, LAY_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LAY_SLS,
KC_LCTL, KC_LGUI, KC_LALT, LAY_SPC, LAYER, KC_RSFT
),
[_LAYER] = LAYOUT_split_4x5_3(
KC_TILD, KC_GRV, KC_LABK, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_RABK, KC_BSLS, KC_DEL,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
SFT_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_SCLN,
SFT_F6, LAY_F7, KC_F8, KC_F9, KC_F10, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______,
_______, _______, _______, FUNCT, _______, _______
),
[_MOD_LAYER] = LAYOUT_split_4x5_3(
KC_TILD, _______, _______, _______, _______, KC_Q, _______, _______, _______, _______,
KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
[_FUNCT] = LAYOUT_split_4x5_3(
RESET, _______, _______, _______, LOCK, MAC_LCK, _______, _______, _______, MAGIC_SWAP_LALT_LGUI,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (get_mods() & MOD_MASK_CAG) {
if (record->event.pressed) {
layer_on(_MOD_LAYER);
} else {
layer_off(_MOD_LAYER);
}
}
if (record->event.pressed) {
if (keycode == KC_BSPC && (get_mods() & MOD_MASK_ALT)) {
tap_code(KC_DEL);
return false;
}
}
return true;
};

View File

@ -0,0 +1 @@
# Default layout for For Science

View File

@ -0,0 +1,18 @@
# For Science
![for_science](https://raw.githubusercontent.com/peej/for-science-keyboard/master/pcb.png)
A split ergo 4x5 keyboard with 3 thumb keys where each half is smaller than the 100x100mm cheap PCB production size.
Designed to be easy to build, it only supports serial communication over a TRRS cable and no LED support.
The PCB is reversible, meaning that you use the same PCB for both the left and right halves and thus need two PCBs to create a full keyboard.
* Keyboard Maintainer: [Peej](https://github.com/peej)
* Hardware Supported: Pro Micro
* Hardware Availability: [Github](https://github.com/peej/for-science-keyboard)
Make example for this keyboard (after setting up your build environment):
make for_science: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).

View File

@ -0,0 +1,21 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output