-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathconsular_lights.py
More file actions
97 lines (86 loc) · 2.36 KB
/
consular_lights.py
File metadata and controls
97 lines (86 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import p9813
import machine
import time
import urandom
STEPS = 20
PAUSE = 5
BETWEEN = 2
num_lights = 6
pin_clk = machine.Pin(14, machine.Pin.OUT) #D2
pin_data = machine.Pin(27, machine.Pin.OUT) #D3
chain = p9813.P9813(pin_clk, pin_data, num_lights)
chain[0] = [0, 128, 0]
chain.write()
time.sleep(0.5)
for i in range(1, num_lights):
chain[i-1] = [0, 0, 0]
chain[i] = [0, 128, 0]
chain.write()
time.sleep(0.5)
# from colorsys.py
def hsv_to_rgb(h, s, v):
if s == 0.0:
return v, v, v
i = int(h*6.0) # XXX assume int() truncates!
f = (h*6.0) - i
p = v*(1.0 - s)
q = v*(1.0 - s*f)
t = v*(1.0 - s*(1.0-f))
i = i%6
if i == 0:
return v, t, p
if i == 1:
return q, v, p
if i == 2:
return p, v, t
if i == 3:
return p, q, v
if i == 4:
return t, p, v
if i == 5:
return v, p, q
# Cannot get here
def randc():
r,g,b = hsv_to_rgb(urandom.getrandbits(8)/255.0, 1, 1.0)
return [int(r*255), int(g*255), int(b*255)]
def fade_each():
cur = [randc() for x in range(num_lights)]
nxt = [randc() for x in range(num_lights)]
while True:
for i in range(STEPS):
for p in range(num_lights):
chain[p] = [int(cur[p][j]+(i*(nxt[p][j]-cur[p][j])/STEPS)) for j in range(3)]
chain.write()
time.sleep(PAUSE)
cur = nxt
nxt = [randc() for x in range(num_lights)]
time.sleep(BETWEEN)
print("Next colour.")
def fade_cycle():
while True:
for l in range(num_lights):
c = randc()
print("light :", l, "colour: ", c)
for i in range(STEPS):
chain[l] = [int(i/STEPS*c[j]) for j in range(3)]
chain.write()
time.sleep(PAUSE)
for i in range(STEPS, 0, -1):
chain[l] = [int(i/STEPS*c[j]) for j in range(3)]
chain.write()
time.sleep(PAUSE)
def fade_all():
cur = randc()
nxt = randc()
while True:
for i in range(STEPS):
val = [int(cur[j]+(i*(nxt[j]-cur[j])/STEPS)) for j in range(3)]
for p in range(num_lights):
chain[p] = val
chain.write()
time.sleep(PAUSE)
cur = nxt
nxt = randc()
time.sleep(BETWEEN)
print("Next colour ", nxt)
fade_all()