HSV functions added
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user