138 lines
4.4 KiB
Python
Executable File
138 lines
4.4 KiB
Python
Executable File
#!/usr/bin/python3
|
|
from phue import Bridge
|
|
import time
|
|
import random
|
|
|
|
b = Bridge('172.18.130.12')
|
|
Nedges = 30;
|
|
edgecode = [None] * Nedges;
|
|
|
|
# The edges are numbered as in info/SSDedges.obj; enter the two-letter code for
|
|
# the lightstrip inserted through each edge in the block below:
|
|
|
|
exec(open("edgecodes.py").read())
|
|
|
|
edges = [ b[code] for code in edgecode ]
|
|
|
|
lasthue = 65535
|
|
fullbright = 254
|
|
fullsat = 254
|
|
|
|
# some color preliminaries
|
|
white = {'hue' : 0, 'bri' : fullbright, 'sat' : 0}
|
|
black = {'bri' : 0, 'sat' : 0}
|
|
|
|
def hueint(frac): return int((frac % 1)*lasthue)
|
|
|
|
def fshue(frac):
|
|
'''Returns a hue number based on the fractional part of frac, warping
|
|
[0,1/2) to [0,1/6) and [1/2,1) to [9/20,14/20)
|
|
'''
|
|
frac = frac % 1
|
|
if frac < 0.5: return hueint(frac/3);
|
|
else: return hueint((frac + 0.4)/2);
|
|
|
|
def vivid(hue): return {'hue' : hue, 'bri' : fullbright, 'sat' : fullsat}
|
|
|
|
# A "setting" is a pair of a list of N lists of edges, and a list of N dicts
|
|
# understandable by Bridge.set_light,
|
|
# e.g. {'bri' : 127, 'hue' : 43690, 'sat' : 224},
|
|
# which means to set the ith list of edges to the ith dict.
|
|
# Note the list of lists does not have to be a partition; edges not mentioned
|
|
# in any list will be left alone.
|
|
|
|
alltogether = [range(0,Nedges)];
|
|
thevoid = (alltogether, [black])
|
|
deepblue = (alltogether, [vivid(hueint(2/3))])
|
|
yelorng = (alltogether, [vivid(hueint(1/6))])
|
|
redred = (alltogether, [vivid(hueint(0))])
|
|
|
|
# A "simpleshow" is a pair of a list of settings, and a list of triples of
|
|
# integers: (setting_index, transition_to, hold_time)
|
|
# where setting_index is an index into the list of settings, and transition_to
|
|
# and hold_time are times in deciseconds to take to morph to the given
|
|
# setting, and then hold at the given setting before the next step of the
|
|
# simpleshow.
|
|
|
|
intro = ([thevoid, deepblue, yelorng, redred],
|
|
[(0,1,0), (1,40,40),
|
|
(2,1,10), (1,1,10), (2,1,10), (1,1,10), (2,1,10), (1,1,10), (2,1,10),
|
|
(3,60,40), (0,30,5)])
|
|
|
|
interlude = ([thevoid], [(0,30,10),(0,30,10)])
|
|
|
|
def runsimple(ss):
|
|
'''Takes one argument, a simple show; causes the simple show to be
|
|
executed on the FireStar
|
|
'''
|
|
settings = ss[0]
|
|
for (setting_index, transition_to, hold_time) in ss[1]:
|
|
theset = settings[setting_index]
|
|
subs = theset[0]
|
|
cmds = theset[1]
|
|
nsubs = len(subs)
|
|
for i in range(0,nsubs):
|
|
thiscmd = cmds[i].copy()
|
|
thiscmd['transitiontime'] = transition_to
|
|
b.set_light([edges[e].light_id for e in subs[i]], thiscmd)
|
|
time.sleep((transition_to + hold_time)/10)
|
|
|
|
#runsimple(intro)
|
|
|
|
# The most symmetric five-coloring of edges
|
|
fivecs = [];
|
|
|
|
fivecs.append([[0,17, 12,22, 9,25], [3,11, 16,21, 8,26], [1,20, 10,15, 7,27],
|
|
[2,23, 13,18, 5,29], [4,14, 19,24, 6,28]]);
|
|
|
|
exec(open("fivecolor.py").read())
|
|
|
|
#runsimple(interlude)
|
|
#runsimple(jmsshow1)
|
|
#runsimple(interlude)
|
|
#runsimple(jmsshow2)
|
|
|
|
# Let's identify the stars:
|
|
stars = [[0,1,8,24,13], [17,20,26,19,18], [0,4,5,10,21], [17,14,29,15,16],
|
|
[1,2,6,12,16], [20,23,28,22,21], [2,3,9,15,19], [23,11,25,10,24],
|
|
[3,4,7,18,22], [11,14,27,13,12], [5,6,7,8,9], [29,28,27,26,25]]
|
|
|
|
starsettings = []
|
|
for off in [0,2]:
|
|
for s in range(0,12):
|
|
starsettings.append(([stars[s]],
|
|
[{'hue': fshue((off+s)/4 + random.uniform(0,1/4)),
|
|
'sat': random.randint(191,254),
|
|
'bri': fullbright}]))
|
|
starshow = (starsettings, [(n,10,30) for n in range(0,24)])
|
|
|
|
#runsimple(interlude)
|
|
#runsimple(starshow)
|
|
|
|
# Tour of 5-colorings suggested by Henry Segerman implemented by Henry
|
|
# Segerman and Glen Whitney, based on
|
|
# http://www.weddslist.com/writing/icos/listc.html
|
|
# The keys in basehues are Nick's color symbols,
|
|
# even though they correspond to
|
|
# Red, orangeY, Goldenrod, cyanoBlue, and darKblue
|
|
# Map from Nick's vertex pairs to FireStar edge numbers:
|
|
#
|
|
|
|
basehues = {'R': 0, 'Y': 5461, 'G': 10923, 'B': 32768, 'K': 43691}
|
|
|
|
def vb(ltr): return vivid(basehues[ltr])
|
|
|
|
fivecolors = [vb(c) for c in ['R', 'Y', 'G', 'B', 'K']]
|
|
|
|
# Nick's coloring (NC) "0"
|
|
fivetour = [(fivecs[0], fivecolors)]
|
|
# Step NC "0" to NC "1"
|
|
fivetour.append(([[3,21,26],[4,19,28]], [vb('K'),vb('Y')]))
|
|
# Step NC "1" to NC "0"
|
|
fivetour.append(([[3,21,26],[4,19,28]], [vb('Y'),vb('K')]))
|
|
|
|
tour5show = (fivetour, [(0,30,20),(1,5,5),(2,5,5),(1,5,5),(2,5,5),(1,5,30)])
|
|
|
|
runsimple(interlude)
|
|
runsimple(tour5show)
|