1 Commits

Author SHA1 Message Date
Cole Smith
58a7f04d00 added draculad keyboard 2023-01-25 12:46:53 -08:00
8 changed files with 193 additions and 178 deletions

24
boards/draculad/README.md Normal file
View File

@@ -0,0 +1,24 @@
# Draculad
The Draculad is is a feature-packed 30% split columnar staggered keyboard.
Retailers (USA)
[Boardsource](https://boardsource.xyz/store)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [peg_RGB_matrix](/docs/en/peg_rgb_matrix.md) Allows mod keys to act as different keys when tapped.
- [peg_oled_display](/docs/en/peg_oled_display.md) Connects halves using a wire
Common Extensions
- [Power](/docs/enpower.md) Powersaving features for battery life
## Microcontroller support
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
```python
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
```

69
boards/draculad/kb.py Normal file
View File

@@ -0,0 +1,69 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_Micro.avr_promicro import translate as avr
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
# from kmk.scanners.encoder import RotaryioEncoder
from kmk.scanners.keypad import MatrixScanner
class KMKKeyboard(_KMKKeyboard):
def __init__(self):
# create and register the scanner
self.matrix = [
MatrixScanner(
# required arguments:
column_pins = self.col_pins,
row_pins = self.row_pins,
# optional arguments with defaults:
columns_to_anodes=DiodeOrientation.COL2ROW,
interval=0.02,
max_events=64
),
# RotaryioEncoder(
# pin_a=self.pin_a1,
# pin_b=self.pin_b1,
# # optional
# divisor=4,
# ),
# RotaryioEncoder(
# pin_a=self.pin_a2,
# pin_b=self.pin_b2,
# # optional
# divisor=4,
# )
]
col_pins = (
pins[avr["F4"]],
pins[avr["F5"]],
pins[avr["F6"]],
pins[avr["F7"]],
pins[avr["B1"]],
)
row_pins = (pins[avr["D4"]], pins[avr["C6"]], pins[avr["D7"]], pins[avr["E6"]])
data_pin = pins[avr["D2"]]
rgb_pixel_pin = pins[avr["D3"]]
rgb_num_pixels = 20
i2c = board.I2C
SCL=pins[5]
SDA=pins[4]
pin_a1=pins[avr["B2"]]
pin_a2=pins[avr["B4"]]
pin_b1=pins[avr["B6"]]
pin_b2=pins[avr["B5"]]
led_key_pos=[
5,6,7,8,9,19,18,17,16,15,14,13,12,11,10,0,1,2,3,4
]
brightness_limit = 1.0
num_pixels = 20
# NOQA
# flake8: noqa
# fmt: off
coord_mapping = [
0, 1, 2, 3, 4, 24, 23, 22, 21, 20,
5, 6, 7, 8, 9, 29, 28, 27, 26, 25,
10, 11, 12, 13, 14, 34, 33, 32, 31, 30,
17, 18, 19, 39, 36, 35,
]

64
boards/draculad/main.py Normal file
View File

@@ -0,0 +1,64 @@
from kb import KMKKeyboard
from kmk.extensions.peg_oled_Display import (
Oled,
OledData,
OledDisplayMode,
OledReactionType,
)
from kmk.extensions.peg_rgb_matrix import Rgb_matrix
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.modtap import ModTap
from kmk.modules.split import Split
keyboard = KMKKeyboard()
keyboard.debug_enable=True
modtap = ModTap()
layers_ext = Layers()
keyboard.modules.append(layers_ext)
keyboard.modules.append(modtap)
# oled
oled_ext = Oled(OledData(corner_one={0:OledReactionType.STATIC,1:["1 2 3 4 5 6","","","","","","",""]},corner_two={0:OledReactionType.STATIC,1:[" 7 8 Layer","","","","","",""," 7 8 Layer"]},corner_three={0:OledReactionType.LAYER,1:["^"," ^"," ^"," ^"," ^"," ^","",""]},corner_four={0:OledReactionType.LAYER,1:["","","","","",""," ^"," ^"]}),toDisplay=OledDisplayMode.TXT,flip= True)
# oled
keyboard.extensions.append(oled_ext)
# ledmap
rgb_ext = Rgb_matrix(ledDisplay=[[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255],[255,255,255]],split=True,rightSide=False,disable_auto_write=True)
# ledmap
keyboard.extensions.append(rgb_ext)
split = Split(use_pio=True)
keyboard.modules.append(split)
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(2)
RAISE = KC.MO(1)
keyboard.keymap = [
[ #QWERTY
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.LCTL, LOWER, KC.SPC, KC.BSPC, RAISE, KC.ENT
],
[ #RAISE
KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0,\
KC.TAB, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT, XXXXXXX, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC,\
KC.LCTL, KC.GRV, KC.LGUI, KC.LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.BSLS, KC.QUOT,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
],
[ #LOWER
KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN,\
KC.ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR,\
KC.CAPS, KC.TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.PIPE, KC.DQT,\
XXXXXXX, XXXXXXX, XXXXXXX, KC.ENT, XXXXXXX, KC.DEL
]
]
if __name__ == '__main__':
keyboard.go()

View File

@@ -6,18 +6,16 @@ from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (pins[19], pins[18], pins[17], pins[16])
row_pins = (board.pins[19], board.pins[18], board.pins[17], board.pins[16])
col_pins = (
pins[6],
pins[7],
pins[8],
pins[9],
pins[10],
board.pins[6],
board.pins[7],
board.pins[8],
board.pins[9],
board.pins[10],
)
diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = pins[0]
rgb_num_pixels = 40
data_pin = pins[1]
SCL = board.SCL
SDA = board.SDA
data_pin = board.pins[1]
i2c = board.I2C

View File

@@ -1,53 +1,27 @@
from kb import KMKKeyboard
from kmk.extensions.peg_oled_Display import (
Oled,
OledData,
OledDisplayMode,
OledReactionType,
)
from kmk.extensions.layers import Layers
from kmk.extensions.split import Split, SplitSide, SplitType
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.split import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
split = Split(use_pio=True)
oled_ext = Oled(
OledData(
corner_one={
0: OledReactionType.STATIC,
1: ['1 2 3 4 5 6', '', '', '', '', '', '', ''],
},
corner_two={
0: OledReactionType.STATIC,
1: [' 7 8 Layer', '', '', '', '', '', '', ' 7 8 Layer'],
},
corner_three={
0: OledReactionType.LAYER,
1: ['^', ' ^', ' ^', ' ^', ' ^', ' ^', '', ''],
},
corner_four={
0: OledReactionType.LAYER,
1: ['', '', '', '', '', '', ' ^', ' ^'],
},
),
toDisplay=OledDisplayMode.TXT,
flip=True,
)
keyboard.extensions.append(oled_ext)
# TODO Comment one of these on each side
split_side = SplitSide.LEFT
split_side = SplitSide.RIGHT
split = Split(split_type=SplitType.BLE, split_side=split_side)
layers_ext = Layers()
keyboard.modules = [layers_ext, split]
keyboard.extensions = [layers_ext, split]
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(2)
RAISE = KC.MO(1)
KC_Z_SF = KC.LSFT(KC.Z)
KC_SLSF = KC.RSFT(KC.SLSH)
KC_11SF = KC.LSFT(KC.F11)
@@ -55,131 +29,23 @@ KC_GRSF = KC.RSFT(KC.GRV)
keyboard.keymap = [
[ #QWERTY
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.ENT,
KC_Z_SF,
KC.X,
KC.C,
KC.V,
KC.B,
KC.N,
KC.M,
KC.COMM,
KC.DOT,
KC_SLSF,
KC.LCTL,
KC.LALT,
KC.LGUI,
LOWER,
KC.BSPC,
KC.SPC,
RAISE,
KC.RGUI,
KC.APP,
KC.RCTL,
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.ENT,
KC.Z_SF, KC.X, KC.C, KC.V, KC.B, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSF,
KC.LCTL, KC.LALT, KC.LGUI, LOWER, KC.BSPC, KC.SPC, RAISE, KC.RGUI, KC.APP, KC.RCTL
],
[ #RAISE
KC.N1,
KC.N2,
KC.N3,
KC.N4,
KC.N5,
KC.N6,
KC.N7,
KC.N8,
KC.N9,
KC.N0,
KC.LSFT,
XXXXXXX,
XXXXXXX,
XXXXXXX,
XXXXXXX,
KC.LEFT,
KC.DOWN,
KC.UP,
KC.RGHT,
KC.RSFT,
XXXXXXX,
XXXXXXX,
XXXXXXX,
XXXXXXX,
XXXXXXX,
KC.MINS,
KC.RO,
KC.COMM,
KC.DOT,
KC_SLSF,
_______,
_______,
_______,
_______,
_______,
_______,
_______,
_______,
_______,
_______,
KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0,
KC.LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT, KC.RSFT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.MINS, KC.RO, KC.COMM, KC.DOT, KC.SLSF,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
],
[ #LOWER
KC.F1,
KC.F2,
KC.F3,
KC.F4,
KC.F5,
KC.MINS,
KC.EQL,
KC.LBRC,
KC.RBRC,
KC.BSLS,
KC.F6,
KC.F7,
KC.F8,
KC.F9,
KC.F10,
XXXXXXX,
XXXXXXX,
XXXXXXX,
KC.SCLN,
KC.QUOT,
KC_11SF,
KC.F12,
KC.ESC,
KC.TAB,
_______,
KC.DEL,
XXXXXXX,
XXXXXXX,
KC.RO,
KC_GRSF,
_______,
_______,
_______,
_______,
KC.DEL,
_______,
_______,
_______,
_______,
_______,
],
KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC, KC.BSLS,
KC.F6, KC.F7, KC.F8, KC.F9, KC.F10, XXXXXXX, XXXXXXX, XXXXXXX, KC.SCLN, KC.QUOT,
KC.N11SF, KC.F12, KC.ESC, KC.TAB, _______, KC.DEL, XXXXXXX, XXXXXXX, KC.RO, KC.GRSF,
_______, _______, _______, _______, KC.DEL, _______, _______, _______, _______, _______
]
]
if __name__ == '__main__':

View File

@@ -84,7 +84,7 @@ class Layers(_Layers):
last_top_layer = 0
hues = (4, 20, 69)
def after_hid_send(self, keyboard):
def after_hid_send(keyboard):
if keyboard.active_layers[0] != self.last_top_layer:
self.last_top_layer = keyboard.active_layers[0]
rgb.set_hsv_fill(self.hues[self.last_top_layer], 255, 255)

View File

@@ -59,7 +59,7 @@ def hsv_to_rgb(hue, sat, val):
return (r >> 8), (g >> 8), (b >> 8)
def hsv_to_rgbw(hue, sat, val):
def hsv_to_rgbw(self, hue, sat, val):
'''
Converts HSV values, and returns a tuple of RGBW values
:param hue:

View File

@@ -46,9 +46,7 @@ class Layers(HoldTap):
on_release=self._mo_released,
)
make_argumented_key(
validator=layer_key_validator,
names=('DF',),
on_press=self._df_pressed,
validator=layer_key_validator, names=('DF',), on_press=self._df_pressed
)
make_argumented_key(
validator=layer_key_validator,
@@ -57,14 +55,10 @@ class Layers(HoldTap):
on_release=self._lm_released,
)
make_argumented_key(
validator=layer_key_validator,
names=('TG',),
on_press=self._tg_pressed,
validator=layer_key_validator, names=('TG',), on_press=self._tg_pressed
)
make_argumented_key(
validator=layer_key_validator,
names=('TO',),
on_press=self._to_pressed,
validator=layer_key_validator, names=('TO',), on_press=self._to_pressed
)
make_argumented_key(
validator=layer_key_validator_lt,