parent
d3b92742c1
commit
c0b15473e6
|
@ -0,0 +1,14 @@
|
|||
import storage
|
||||
import usb_midi
|
||||
|
||||
usb_midi.disable() # Disable USB MIDI temporarily for reconfiguration
|
||||
usb_midi.set_names(
|
||||
audio_control_interface_name="gMA3_ENC",
|
||||
)
|
||||
usb_midi.enable()
|
||||
|
||||
storage.remount("/", readonly=False)
|
||||
m = storage.getmount("/")
|
||||
m.label = "gMA3_ENC"
|
||||
storage.remount("/", readonly=False)
|
||||
storage.enable_usb_drive()
|
94
code.py
94
code.py
|
@ -57,21 +57,42 @@ mode_toggle_note = 21
|
|||
|
||||
# Functions
|
||||
def encoder_sweep(direction):
|
||||
sweep_order = [3, 4, 5, 6] if direction == "CW" else [6, 5, 4, 3]
|
||||
for i in sweep_order:
|
||||
led[i] = (255, 255, 255)
|
||||
if direction == "CW" and i > 3:
|
||||
led[i - 1] = (100, 100, 100)
|
||||
elif direction == "CCW" and i < 6:
|
||||
led[i + 1] = (100, 100, 100)
|
||||
|
||||
time.sleep(0.02)
|
||||
trail_length = 3
|
||||
delay = 0.03 # smoother transition
|
||||
encoder_range = [3, 4, 5, 6]
|
||||
if direction == "CCW":
|
||||
encoder_range = list(reversed(encoder_range))
|
||||
|
||||
for i in range(len(encoder_range)):
|
||||
for j in range(trail_length):
|
||||
idx = i - j
|
||||
if 0 <= idx < len(encoder_range):
|
||||
blend_ratio = (trail_length - j) / trail_length # 1.0 to 0.33
|
||||
white = (255, 255, 255)
|
||||
base_color = encoder_colors[current_encoder]
|
||||
|
||||
# Blend white → base_color
|
||||
blended = tuple(
|
||||
int(white[k] * blend_ratio + base_color[k] * (1 - blend_ratio))
|
||||
for k in range(3)
|
||||
)
|
||||
led[encoder_range[idx]] = blended
|
||||
|
||||
time.sleep(delay)
|
||||
|
||||
# Reset all encoder LEDs to base color at end
|
||||
for i in encoder_range:
|
||||
led[i] = encoder_colors[current_encoder]
|
||||
|
||||
if direction == "CW" and i > 3:
|
||||
led[i - 1] = encoder_colors[current_encoder]
|
||||
elif direction == "CCW" and i < 6:
|
||||
led[i + 1] = encoder_colors[current_encoder]
|
||||
def fade_leds_parallel(led_targets, steps=10, delay=0.01):
|
||||
for step in range(steps + 1):
|
||||
for index, start_color, end_color in led_targets:
|
||||
blended = tuple(
|
||||
int(start_color[i] + (end_color[i] - start_color[i]) * step / steps)
|
||||
for i in range(3)
|
||||
)
|
||||
led[index] = blended
|
||||
time.sleep(delay)
|
||||
|
||||
|
||||
def startup_animation():
|
||||
|
@ -111,7 +132,7 @@ def startup_animation():
|
|||
led[i] = tuple(int(c * step / 100) for c in encoder_colors[current_encoder])
|
||||
time.sleep(0.02)
|
||||
|
||||
# -------------------- Startup -----------------------
|
||||
# Startup
|
||||
print("MIDI Encoder Controller started.")
|
||||
startup_animation()
|
||||
led[3:7] = [encoder_colors[current_encoder]] * 4
|
||||
|
@ -120,7 +141,16 @@ led[1] = encoder_colors[(current_encoder - 1) % len(encoder_colors)]
|
|||
led[2] = (63, 63, 63) # Mode toggle LED default 25% white
|
||||
mode_button_state_note = 0
|
||||
|
||||
# -------------------- Main Loop ---------------------
|
||||
should_interrupt = False
|
||||
|
||||
def animation_interrupt():
|
||||
global should_interrupt
|
||||
if should_interrupt:
|
||||
should_interrupt = False
|
||||
return True
|
||||
return False
|
||||
|
||||
# Main Loop
|
||||
while True:
|
||||
enc_button.update()
|
||||
next_button.update()
|
||||
|
@ -148,6 +178,23 @@ while True:
|
|||
# Next Encoder Button
|
||||
if next_button.fell:
|
||||
current_encoder = (current_encoder + 1) % len(encoder_cc_notes)
|
||||
|
||||
# Prepare fade targets
|
||||
led_targets = []
|
||||
|
||||
# Fade main encoder LEDs (3 to 6)
|
||||
for i in range(3, 7):
|
||||
led_targets.append((i, led[i], encoder_colors[current_encoder]))
|
||||
|
||||
# Fade forward/backward indicators (0 and 1)
|
||||
forward_color = encoder_colors[(current_encoder + 1) % len(encoder_colors)]
|
||||
backward_color = encoder_colors[(current_encoder - 1) % len(encoder_colors)]
|
||||
led_targets.append((0, led[0], forward_color))
|
||||
led_targets.append((1, led[1], backward_color))
|
||||
|
||||
# Run the simultaneous fade
|
||||
fade_leds_parallel(led_targets)
|
||||
|
||||
forward_color = encoder_colors[(current_encoder + 1) % len(encoder_colors)]
|
||||
backward_color = encoder_colors[(current_encoder - 1) % len(encoder_colors)]
|
||||
led[3:7] = [encoder_colors[current_encoder]] * 4
|
||||
|
@ -157,6 +204,23 @@ while True:
|
|||
# Back Encoder Button
|
||||
if back_button.fell:
|
||||
current_encoder = (current_encoder - 1) % len(encoder_cc_notes)
|
||||
|
||||
# Prepare fade targets
|
||||
led_targets = []
|
||||
|
||||
# Fade main encoder LEDs (3 to 6)
|
||||
for i in range(3, 7):
|
||||
led_targets.append((i, led[i], encoder_colors[current_encoder]))
|
||||
|
||||
# Fade forward/backward indicators (0 and 1)
|
||||
forward_color = encoder_colors[(current_encoder + 1) % len(encoder_colors)]
|
||||
backward_color = encoder_colors[(current_encoder - 1) % len(encoder_colors)]
|
||||
led_targets.append((0, led[0], forward_color))
|
||||
led_targets.append((1, led[1], backward_color))
|
||||
|
||||
# Run the simultaneous fade
|
||||
fade_leds_parallel(led_targets)
|
||||
|
||||
forward_color = encoder_colors[(current_encoder + 1) % len(encoder_colors)]
|
||||
backward_color = encoder_colors[(current_encoder - 1) % len(encoder_colors)]
|
||||
led[3:7] = [encoder_colors[current_encoder]] * 4
|
||||
|
|
Loading…
Reference in New Issue