annotate ub-timer/main.py @ 24:872d8155ed0c default tip

start ub-timer
author drewp@bigasterisk.com
date Tue, 24 Dec 2024 21:36:53 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
1 '''
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
2 pin 11 = ws2812 ring
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
3 pin 39 = sw 4
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
4 pin 37 = sw 3
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
5 pin 35 = sw 2
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
6 pin 33 = sw 1
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
7 pin 40 = audio trigger 0
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
8 pin 38 = audio trigger 1
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
9 pin 36 = audio trigger 2
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
10 pin 34 = audio trigger 3
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
11
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
12 pdm run ampy -p /dev/ttyACM0 put ub-timer/ ./ && pdm run ampy -p /dev/ttyACM0 reset --hard
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
13 minicom -b 115200 -D /dev/ttyACM0
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
14 '''
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
15
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
16 import time
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
17 from machine import Pin
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
18 from neopixel import NeoPixel
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
19 import random
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
20
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
21 from colorsys_local import hsv_to_rgb
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
22
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
23
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
24 def rand_color():
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
25 value = .1
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
26 sat = 1
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
27 hue = random.random()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
28 return tuple(int(x * 255) for x in hsv_to_rgb(hue, sat, value))
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
29
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
30
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
31 pin = Pin(11, Pin.OUT)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
32 switch_pin = [
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
33 Pin(33, Pin.IN, Pin.PULL_UP),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
34 Pin(35, Pin.IN, Pin.PULL_UP),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
35 Pin(37, Pin.IN, Pin.PULL_UP),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
36 Pin(39, Pin.IN, Pin.PULL_UP),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
37 ]
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
38 audio_trigger = [
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
39 Pin(40, Pin.OUT, value=1),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
40 Pin(38, Pin.OUT, value=1),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
41 Pin(36, Pin.OUT, value=1),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
42 Pin(34, Pin.OUT, value=1),
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
43 ]
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
44 song_duration = [
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
45 121.47,
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
46 2.16,
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
47 1,
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
48 1,
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
49 ]
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
50 num_leds = 12
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
51 np = NeoPixel(pin, num_leds)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
52 audio_start_ms = 1
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
53 audio_end_ms = 0
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
54 last_sw_pressed = [0, 0, 0, 0]
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
55
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
56
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
57 def startAudio(index, now):
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
58 global audio_start_ms, audio_end_ms
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
59 audio_trigger[index].value(0)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
60 audio_start_ms = now
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
61 audio_end_ms = now + song_duration[index] * 1000
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
62 for fr in range(num_leds):
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
63 np[fr] = rand_color()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
64 np.write()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
65 time.sleep(.02)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
66 audio_trigger[index].value(1)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
67
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
68
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
69 def rand_fill(start):
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
70 for fr in range(num_leds):
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
71 if fr > start:
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
72 np[fr] = rand_color()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
73 else:
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
74 np[fr] = (0, 0, 0)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
75 np.write()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
76
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
77
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
78 def scan_buttons(now):
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
79 for index in range(4):
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
80 pressed = not switch_pin[index]()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
81 if pressed != last_sw_pressed[index]:
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
82 last_sw_pressed[index] = pressed
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
83 if pressed:
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
84 startAudio(index, now)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
85
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
86
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
87 def update_leds(now):
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
88 frac = (now - audio_start_ms) / (audio_end_ms - audio_start_ms)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
89 if 0 < frac < 1:
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
90 cur = max(0, min(11, int(frac * num_leds)))
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
91 rand_fill(cur)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
92 else:
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
93 np.fill((0, 0, 0))
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
94 np.write()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
95
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
96
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
97 while True:
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
98 now = time.ticks_ms()
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
99 update_leds(now)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
100 scan_buttons(now)
872d8155ed0c start ub-timer
drewp@bigasterisk.com
parents:
diff changeset
101 time.sleep(.05)