light: debounce mode switch, some other improvements
This commit is contained in:
parent
c4826219bf
commit
bfbd8316fc
1 changed files with 27 additions and 38 deletions
65
src/main.py
65
src/main.py
|
@ -5,14 +5,13 @@ import time
|
|||
|
||||
# Pins
|
||||
PIN_NP = 5
|
||||
PIN_Y= 0
|
||||
PIN_G= 4
|
||||
PIN_B= 2
|
||||
PIN_MODE= 0
|
||||
PIN_COLOR = 4
|
||||
# NeoPixel
|
||||
NUM_LED = 16
|
||||
# y - Mode
|
||||
MODE_MAX = 5
|
||||
MODES = [ "off", "on", "color_chase", "rainbow", "strobe" ]
|
||||
MODE_MAX = 4
|
||||
MODES = [ "on", "color_chase", "rainbow", "strobe" ]
|
||||
MODE_STEP = 1
|
||||
# g - Color
|
||||
COLOR_MAX = 255
|
||||
|
@ -22,39 +21,32 @@ BRIGHTNESS_MAX = 250
|
|||
BRIGHTNESS_STEP = 50
|
||||
# Delay
|
||||
DELAY = 0.1
|
||||
DELAY_IRQ = 0.5
|
||||
DELAY_CHASE = 0.05
|
||||
DELAY_STROBE = 0.2
|
||||
DELAY_MODE = 0.5
|
||||
|
||||
light = None
|
||||
state = None
|
||||
ts_mode = 0
|
||||
|
||||
def handle_y(pin):
|
||||
global light, state
|
||||
if state is None:
|
||||
state = machine.disable_irq()
|
||||
def handle_mode(pin):
|
||||
global light, ts_mode
|
||||
if time.time() > (ts_mode + DELAY_MODE):
|
||||
ts_mode = time.time()
|
||||
light.set_fn("mode")
|
||||
|
||||
def handle_g(pin):
|
||||
global light, state
|
||||
def handle_color(pin):
|
||||
global light
|
||||
light.set_fn("color")
|
||||
|
||||
def handle_b(pin):
|
||||
global light, state
|
||||
light.set_fn("brightness")
|
||||
|
||||
class Light:
|
||||
def __init__(self):
|
||||
self.mode = 0
|
||||
self.color = 0
|
||||
self.brightness = 0
|
||||
self.np = neopixel.NeoPixel(machine.Pin(PIN_NP), NUM_LED)
|
||||
self.sw_y = machine.Pin(PIN_Y, machine.Pin.IN, machine.Pin.PULL_UP)
|
||||
self.sw_g = machine.Pin(PIN_G, machine.Pin.IN, machine.Pin.PULL_UP)
|
||||
self.sw_b = machine.Pin(PIN_B, machine.Pin.IN, machine.Pin.PULL_UP)
|
||||
self.sw_y.irq(trigger=machine.Pin.IRQ_FALLING, handler=handle_y)
|
||||
self.sw_g.irq(trigger=machine.Pin.IRQ_FALLING, handler=handle_g)
|
||||
self.sw_b.irq(trigger=machine.Pin.IRQ_FALLING, handler=handle_b)
|
||||
self.sw_mode = machine.Pin(PIN_MODE, machine.Pin.IN, machine.Pin.PULL_UP)
|
||||
self.sw_color = machine.Pin(PIN_COLOR, machine.Pin.IN, machine.Pin.PULL_UP)
|
||||
self.sw_mode.irq(trigger=machine.Pin.IRQ_FALLING, handler=handle_mode)
|
||||
self.sw_color.irq(trigger=machine.Pin.IRQ_FALLING, handler=handle_color)
|
||||
|
||||
def set_fn(self, fn):
|
||||
if fn == "mode":
|
||||
|
@ -87,25 +79,22 @@ class Light:
|
|||
|
||||
def start(self):
|
||||
global state
|
||||
old_mode = self.mode
|
||||
old_mode = None
|
||||
old_color = self.color
|
||||
old_brightness = self.brightness
|
||||
i = 0
|
||||
j = 0
|
||||
while True:
|
||||
if state:
|
||||
time.sleep(DELAY_IRQ)
|
||||
machine.enable_irq(state)
|
||||
state = None
|
||||
if not self.mode == old_mode:
|
||||
print("mode: {}, old_mode: {}".format(MODES[self.mode], MODES[old_mode]))
|
||||
if MODES[self.mode] == "off":
|
||||
if not self.mode == old_mode:
|
||||
old_mode = self.mode
|
||||
self.set_color(-1)
|
||||
time.sleep(DELAY)
|
||||
# Off
|
||||
elif MODES[self.mode] == "on":
|
||||
print("mode: {} ({}), old_mode: {}".format(self.mode, MODES[self.mode], old_mode))
|
||||
# # Off
|
||||
# if MODES[self.mode] == "off":
|
||||
# if not self.mode == old_mode:
|
||||
# old_mode = self.mode
|
||||
# self.set_color(-1)
|
||||
# time.sleep(DELAY)
|
||||
# On
|
||||
if MODES[self.mode] == "on":
|
||||
if not self.mode == old_mode:
|
||||
old_mode = self.mode
|
||||
self.set_color(self.color)
|
||||
|
@ -113,7 +102,7 @@ class Light:
|
|||
old_color = self.color
|
||||
self.set_color(self.color)
|
||||
time.sleep(DELAY)
|
||||
# On
|
||||
# Color Chase
|
||||
elif MODES[self.mode] == "color_chase":
|
||||
if not self.mode == old_mode:
|
||||
old_mode = self.mode
|
||||
|
|
Loading…
Reference in a new issue