Drum rack and lights firmware examples #1

Open
flpvsk wants to merge 3 commits from flpvsk/neogrid:example/drum-rack into main
Showing only changes of commit c59161f2b4 - Show all commits

Add startup animation to drum rack example

Andrey Salomatin 2026-04-12 00:49:06 +02:00

View file

@ -107,9 +107,9 @@ while not m.is_open():
# TX constants
CHANNEL = 0
PITCH_C1 = 37
CONTROLLER = 64
# CONTROLLER = 64
control_val = 0
# control_val = 0
def init_btns():
row_pins = [
@ -154,17 +154,53 @@ turned_on = set()
(set_led, show_all) = init_leds()
# for i in range(NUM_LEDS):
# set_led(i, CYAN)
# for j in range(NUM_LEDS):
# if i != j:
# set_led(j, BLACK)
# show_all()
# time.sleep(2)
#
CYAN = (0, 255, 255)
BLACK = (0, 0, 0)
C_ACTIVE = (140, 60, 140)
C_INACTIVE = (0, 0, 0)
def shader(x, y, t):
st_x = float(x + 0.5) / NUM_COL
st_y = float(y + 0.5) / NUM_ROW
inv_t = 0.5 * (1.0 - t)
if st_x < t or st_y < t or (1.0 - st_x) < t or (1.0 - st_y) < t:
if t < 0.5:
return (
int(C_ACTIVE[0] * 0.5 * t),
int(C_ACTIVE[1] * 0.5 * t),
int(C_ACTIVE[2] * 0.5 * t),
)
if t >= 0.5:
return (
int(C_ACTIVE[0] * inv_t),
int(C_ACTIVE[1] * inv_t),
int(C_ACTIVE[2] * inv_t),
)
return C_INACTIVE
def play_animation(dur_s, fps):
cur_ms = float(0)
dur_ms = dur_s * 1000
interval_ms = int(1000 / fps)
processing_ms = 200
while cur_ms < dur_ms:
for r in range(0, NUM_ROW):
for c in range(0, NUM_COL):
t = cur_ms / dur_ms
color = shader(c, r, t)
set_led(c + r * NUM_COL, color)
show_all()
cur_ms += interval_ms + processing_ms
time.sleep_ms(interval_ms)
for l in range(NUM_LEDS):
set_led(l, C_INACTIVE)
show_all()
play_animation(3, 10)
print("Starting loop...")
while m.is_open():
@ -196,13 +232,13 @@ while m.is_open():
for key in to_turn_on:
m.note_on(CHANNEL, PITCH_C1 + key - 1)
set_led(key, CYAN)
set_led(key, C_ACTIVE)
turned_on.add(key)
for key in to_turn_off:
m.note_off(CHANNEL, PITCH_C1 + key - 1)
turned_on.remove(key)
set_led(key, BLACK)
set_led(key, C_INACTIVE)
show_all()