HSV functions added
This commit is contained in:
parent
4b033857b1
commit
7a58ac041f
@ -276,6 +276,7 @@ class Firmware:
|
||||
print('New State: {}'.format(self._state._to_dict()))
|
||||
|
||||
gc.collect()
|
||||
'''
|
||||
test = rgb.color_chase(self.pixels,
|
||||
self.num_pixels,
|
||||
color=(255,0,0),
|
||||
@ -285,3 +286,4 @@ class Firmware:
|
||||
if test is not None:
|
||||
# Debugging some strange errors with NoneType
|
||||
self.pixel_state = test
|
||||
'''
|
||||
|
117
kmk/rgb.py
117
kmk/rgb.py
@ -1,27 +1,27 @@
|
||||
OFF = (0, 0, 0)
|
||||
RED = (255, 0, 0)
|
||||
YELLOW = (255, 150, 0)
|
||||
GREEN = (0, 255, 0)
|
||||
CYAN = (0, 255, 255)
|
||||
BLUE = (0, 0, 255, 0)
|
||||
PURPLE = (180, 0, 255)
|
||||
COLORS = {
|
||||
'OFF': (0, 0, 0),
|
||||
'RED': (255, 0, 0),
|
||||
'GREEN': (0, 255, 0),
|
||||
'BLUE': (0, 0, 255, 0),
|
||||
'YELLOW': (255, 150, 0),
|
||||
'CYAN': (0, 255, 255),
|
||||
'PURPLE': (180, 0, 255),
|
||||
'WHITE': (255, 255, 255),
|
||||
}
|
||||
|
||||
|
||||
def wheel(pos):
|
||||
# Input a value 0 to 255 to get a color value.
|
||||
# The colours are a transition r - g - b - back to r.
|
||||
if pos < 0 or pos > 255:
|
||||
return (0, 0, 0)
|
||||
if pos < 85:
|
||||
return (255 - pos * 3, pos * 3, 0)
|
||||
if pos < 170:
|
||||
pos -= 85
|
||||
return (0, 255 - pos * 3, pos * 3)
|
||||
pos -= 170
|
||||
return (pos * 3, 0, 255 - pos * 3)
|
||||
def pixelinit():
|
||||
return {
|
||||
'h': 0,
|
||||
's': 255,
|
||||
'v': 255,
|
||||
'animation_mode': None,
|
||||
'speed': 0,
|
||||
'enable': True
|
||||
}
|
||||
|
||||
|
||||
def color_chase(pixels, num_pixels, color, color2=OFF, speed=100, animation_state=0):
|
||||
def color_chase(pixels, num_pixels, color, color2=COLORS['OFF'], speed=100, animation_state=0):
|
||||
if animation_state not in range(num_pixels):
|
||||
color = color2
|
||||
pixels[int(animation_state - num_pixels)] = color
|
||||
@ -38,21 +38,70 @@ def color_chase(pixels, num_pixels, color, color2=OFF, speed=100, animation_stat
|
||||
return animation_state, 0
|
||||
|
||||
|
||||
def rainbow_cycle(pixels, num_pixels, speed=100, animation_state=0, color_state=0):
|
||||
color_state += 1
|
||||
if color_state in range(255):
|
||||
print(animation_state)
|
||||
animation_state +=1
|
||||
if animation_state in range(num_pixels):
|
||||
rc_index = (animation_state * 256 // num_pixels) + animation_state
|
||||
print(pixels[animation_state])
|
||||
print(wheel(rc_index & 255))
|
||||
pixels[animation_state] = wheel(rc_index & 255)
|
||||
else:
|
||||
pixels.show()
|
||||
return 0, color_state
|
||||
def sethsv(hue, sat, val, pixels, index):
|
||||
r = 0
|
||||
g = 0
|
||||
b = 0
|
||||
# TODO Actually pass this limit to allow overrides
|
||||
RGBLIGHT_LIMIT_VAL = 255
|
||||
|
||||
if val > RGBLIGHT_LIMIT_VAL:
|
||||
val=RGBLIGHT_LIMIT_VAL
|
||||
|
||||
if sat == 0:
|
||||
r = val
|
||||
g = val
|
||||
b = val
|
||||
|
||||
else:
|
||||
return animation_state, 0
|
||||
base = ((255 - sat) * val) >> 8
|
||||
color = (val - base) * (hue % 60) / 60
|
||||
|
||||
x = hue / 60
|
||||
if x == 0:
|
||||
r = val
|
||||
g = base + color
|
||||
b = base
|
||||
elif x == 1:
|
||||
r = val - color
|
||||
g = val
|
||||
b = base
|
||||
elif x == 2:
|
||||
r = base
|
||||
g = val
|
||||
b = base + color
|
||||
elif x == 3:
|
||||
r = base
|
||||
g = val - color
|
||||
b = val
|
||||
elif x == 4:
|
||||
r = base + color
|
||||
g = base
|
||||
b = val
|
||||
elif x == 5:
|
||||
r = val
|
||||
g = base
|
||||
b = val - color
|
||||
|
||||
rgb = (r, g, b)
|
||||
setrgb(rgb, pixels, index)
|
||||
|
||||
|
||||
def setrgb(rgb, pixels, index):
|
||||
pixels[index] = (rgb[0], rgb[1], rgb[2])
|
||||
|
||||
|
||||
def setrgbfill(rgb, pixels):
|
||||
pixels.fill(rgb[0], rgb[1], rgb[2])
|
||||
|
||||
|
||||
def increasehue(hue, step):
|
||||
return hue + step % 360
|
||||
|
||||
|
||||
def decreasehue(hue, step):
|
||||
if hue - step < 0:
|
||||
return (hue + 360 - step) % 360
|
||||
else:
|
||||
return hue - step % 360
|
||||
|
||||
|
@ -1,9 +1,8 @@
|
||||
import board
|
||||
import busio
|
||||
import neopixel
|
||||
|
||||
from kmk.consts import DiodeOrientation, LeaderMode, UnicodeMode
|
||||
from kmk.handlers.layers import df_pressed
|
||||
from kmk.handlers.layers import df_pressed, mo_pressed, mo_released, lt_pressed, lt_released
|
||||
from kmk.handlers.sequences import (compile_unicode_string_sequences)
|
||||
from kmk.keys import KC, layer_key_validator, make_argumented_key
|
||||
from kmk.mcus.circuitpython_samd51 import Firmware
|
||||
@ -31,20 +30,11 @@ keyboard.debug_enabled = True
|
||||
keyboard.pixel_pin = board.TX
|
||||
keyboard.num_pixels = 12
|
||||
OFF = (0, 0, 0)
|
||||
CYAN = (0, 255, 255)
|
||||
|
||||
'''
|
||||
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
|
||||
|
||||
RED = (255, 0, 0)
|
||||
YELLOW = (255, 150, 0)
|
||||
GREEN = (0, 255, 0)
|
||||
BLUE = (0, 0, 255)
|
||||
PURPLE = (180, 0, 255)
|
||||
|
||||
pixels.fill(OFF)
|
||||
pixels.show()
|
||||
'''
|
||||
BLUE = (0, 0, 100)
|
||||
CYAN = (0, 100, 100)
|
||||
PURPLE = (71, 0, 100)
|
||||
RED = (100, 0, 0)
|
||||
WHITE = (100, 100, 100)
|
||||
|
||||
emoticons = compile_unicode_string_sequences({
|
||||
# Emoticons, but fancier
|
||||
@ -70,10 +60,6 @@ keyboard.leader_dictionary = {
|
||||
'yay': emoticons.YAY,
|
||||
}
|
||||
|
||||
_______ = KC.TRNS
|
||||
XXXXXXX = KC.NO
|
||||
LT3_SP = KC.LT(3, KC.SPC)
|
||||
SHFT_INS = KC.LSHIFT(KC.INS)
|
||||
|
||||
df = 0
|
||||
gw = 1
|
||||
@ -88,23 +74,90 @@ def base(*args, **kwargs):
|
||||
return df_pressed(*args, **kwargs)
|
||||
|
||||
|
||||
def layer1p(*args, **kwargs):
|
||||
keyboard.pixels.fill(WHITE)
|
||||
keyboard.pixels.show()
|
||||
return mo_pressed(*args, **kwargs)
|
||||
|
||||
|
||||
def layer1r(*args, **kwargs):
|
||||
keyboard.pixels.fill(OFF)
|
||||
keyboard.pixels.show()
|
||||
return mo_released(*args, **kwargs)
|
||||
|
||||
|
||||
def layer2p(*args, **kwargs):
|
||||
keyboard.pixels.fill(BLUE)
|
||||
keyboard.pixels.show()
|
||||
return lt_pressed(*args, **kwargs)
|
||||
|
||||
|
||||
def layer2r(*args, **kwargs):
|
||||
keyboard.pixels.fill(OFF)
|
||||
keyboard.pixels.show()
|
||||
return lt_released(*args, **kwargs)
|
||||
|
||||
|
||||
def layer3p(*args, **kwargs):
|
||||
keyboard.pixels.fill(PURPLE)
|
||||
keyboard.pixels.show()
|
||||
return mo_pressed(*args, **kwargs)
|
||||
|
||||
|
||||
def layer3r(*args, **kwargs):
|
||||
keyboard.pixels.fill(OFF)
|
||||
keyboard.pixels.show()
|
||||
return mo_released(*args, **kwargs)
|
||||
|
||||
|
||||
def gaming(*args, **kwargs):
|
||||
keyboard.pixels.fill(CYAN)
|
||||
keyboard.pixels.show()
|
||||
return df_pressed(*args, **kwargs)
|
||||
|
||||
|
||||
make_argumented_key(
|
||||
validator=layer_key_validator,
|
||||
names=('LAYER_BASE',),
|
||||
on_press=base,
|
||||
)
|
||||
|
||||
make_argumented_key(
|
||||
validator=layer_key_validator,
|
||||
names=('LAYER_1',),
|
||||
on_press=layer1p,
|
||||
on_release=layer1r,
|
||||
)
|
||||
|
||||
make_argumented_key(
|
||||
validator=layer_key_validator,
|
||||
names=('LAYER_2',),
|
||||
on_press=layer2p,
|
||||
on_release=layer2r,
|
||||
)
|
||||
|
||||
make_argumented_key(
|
||||
validator=layer_key_validator,
|
||||
names=('LAYER_3',),
|
||||
on_press=layer3p,
|
||||
on_release=layer3r,
|
||||
)
|
||||
|
||||
|
||||
make_argumented_key(
|
||||
validator=layer_key_validator,
|
||||
names=('LAYER_GAMING',),
|
||||
on_press=gaming,
|
||||
)
|
||||
|
||||
make_argumented_key(
|
||||
validator=layer_key_validator,
|
||||
names=('LAYER_BASE',),
|
||||
on_press=base,
|
||||
)
|
||||
_______ = KC.TRNS
|
||||
XXXXXXX = KC.NO
|
||||
SHFT_INS = KC.LSHIFT(KC.INS)
|
||||
|
||||
BASE = KC.LAYER_BASE(df)
|
||||
LAYER_1 = KC.LAYER_1(r1)
|
||||
LT2_SP = KC.LAYER_2(r2, KC.SPC)
|
||||
LAYER_3 = KC.LAYER_3(r3)
|
||||
GAMING = KC.LAYER_GAMING(gw)
|
||||
|
||||
# ---------------------- Keymap ---------------------------------------------------------
|
||||
@ -112,11 +165,11 @@ GAMING = KC.LAYER_GAMING(gw)
|
||||
keyboard.keymap = [
|
||||
[
|
||||
# df
|
||||
[KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL],
|
||||
[KC.GRV, KC.QUOTE, KC.COMMA, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP],
|
||||
[KC.TAB, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT],
|
||||
[KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH],
|
||||
[KC.LCTRL, KC.LGUI, KC.LALT, KC.LEAD, KC.MO(r1), LT3_SP, LT3_SP, KC.MO(r3), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT],
|
||||
[KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL],
|
||||
[KC.GRV, KC.QUOTE, KC.COMMA, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP],
|
||||
[KC.TAB, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT],
|
||||
[KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH],
|
||||
[KC.LCTRL, KC.LGUI, KC.LALT, KC.LEAD, LAYER_1, KC.LT(r2, KC.SPC), KC.LT(r2, KC.SPC), LAYER_3, KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT],
|
||||
],
|
||||
[
|
||||
# gw
|
||||
@ -124,7 +177,7 @@ keyboard.keymap = [
|
||||
[KC.TAB, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BKSP],
|
||||
[KC.ESC, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT],
|
||||
[KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH],
|
||||
[KC.LCTRL, KC.LGUI, KC.LALT, KC.F1, KC.F2, KC.SPC, KC.SPC, KC.MO(r3), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT],
|
||||
[KC.LCTRL, KC.LGUI, KC.LALT, KC.F1, KC.F2, KC.SPC, KC.LT(r2, KC.SPC), KC.MO(r3), KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT],
|
||||
],
|
||||
[
|
||||
# r1
|
||||
|
Loading…
x
Reference in New Issue
Block a user