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()
|
92
code.py
92
code.py
|
@ -57,21 +57,42 @@ mode_toggle_note = 21
|
||||||
|
|
||||||
# Functions
|
# Functions
|
||||||
def encoder_sweep(direction):
|
def encoder_sweep(direction):
|
||||||
sweep_order = [3, 4, 5, 6] if direction == "CW" else [6, 5, 4, 3]
|
trail_length = 3
|
||||||
for i in sweep_order:
|
delay = 0.03 # smoother transition
|
||||||
led[i] = (255, 255, 255)
|
encoder_range = [3, 4, 5, 6]
|
||||||
if direction == "CW" and i > 3:
|
if direction == "CCW":
|
||||||
led[i - 1] = (100, 100, 100)
|
encoder_range = list(reversed(encoder_range))
|
||||||
elif direction == "CCW" and i < 6:
|
|
||||||
led[i + 1] = (100, 100, 100)
|
|
||||||
|
|
||||||
time.sleep(0.02)
|
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]
|
led[i] = encoder_colors[current_encoder]
|
||||||
|
|
||||||
if direction == "CW" and i > 3:
|
def fade_leds_parallel(led_targets, steps=10, delay=0.01):
|
||||||
led[i - 1] = encoder_colors[current_encoder]
|
for step in range(steps + 1):
|
||||||
elif direction == "CCW" and i < 6:
|
for index, start_color, end_color in led_targets:
|
||||||
led[i + 1] = encoder_colors[current_encoder]
|
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():
|
def startup_animation():
|
||||||
|
@ -111,7 +132,7 @@ def startup_animation():
|
||||||
led[i] = tuple(int(c * step / 100) for c in encoder_colors[current_encoder])
|
led[i] = tuple(int(c * step / 100) for c in encoder_colors[current_encoder])
|
||||||
time.sleep(0.02)
|
time.sleep(0.02)
|
||||||
|
|
||||||
# -------------------- Startup -----------------------
|
# Startup
|
||||||
print("MIDI Encoder Controller started.")
|
print("MIDI Encoder Controller started.")
|
||||||
startup_animation()
|
startup_animation()
|
||||||
led[3:7] = [encoder_colors[current_encoder]] * 4
|
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
|
led[2] = (63, 63, 63) # Mode toggle LED default 25% white
|
||||||
mode_button_state_note = 0
|
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:
|
while True:
|
||||||
enc_button.update()
|
enc_button.update()
|
||||||
next_button.update()
|
next_button.update()
|
||||||
|
@ -148,6 +178,23 @@ while True:
|
||||||
# Next Encoder Button
|
# Next Encoder Button
|
||||||
if next_button.fell:
|
if next_button.fell:
|
||||||
current_encoder = (current_encoder + 1) % len(encoder_cc_notes)
|
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)]
|
forward_color = encoder_colors[(current_encoder + 1) % len(encoder_colors)]
|
||||||
backward_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
|
led[3:7] = [encoder_colors[current_encoder]] * 4
|
||||||
|
@ -157,6 +204,23 @@ while True:
|
||||||
# Back Encoder Button
|
# Back Encoder Button
|
||||||
if back_button.fell:
|
if back_button.fell:
|
||||||
current_encoder = (current_encoder - 1) % len(encoder_cc_notes)
|
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)]
|
forward_color = encoder_colors[(current_encoder + 1) % len(encoder_colors)]
|
||||||
backward_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
|
led[3:7] = [encoder_colors[current_encoder]] * 4
|
||||||
|
|
Loading…
Reference in New Issue