summaryrefslogtreecommitdiffstats
path: root/bridge.py
diff options
context:
space:
mode:
authorAaron Perley <aaron.perley@gmail.com>2016-09-27 21:39:02 -0400
committerAaron Perley <aaron.perley@gmail.com>2016-09-27 21:39:02 -0400
commit6e265cfa5002a5667681733eae08357f2b9695e5 (patch)
treee82e90871c04252114421794849bed152ee2700c /bridge.py
parentFish render (diff)
downloadbridge-6e265cfa5002a5667681733eae08357f2b9695e5.tar.zst
Add bridge simulator and cleanup code
Diffstat (limited to 'bridge.py')
-rw-r--r--bridge.py70
1 files changed, 38 insertions, 32 deletions
diff --git a/bridge.py b/bridge.py
index 22d8da2..64fc54f 100644
--- a/bridge.py
+++ b/bridge.py
@@ -3,23 +3,43 @@
from __future__ import division
import color
import colorsys
-import lumiversepython
+from DummyRig import DummyRig #import lumiversepython
import math
import random
import time
-FRAME_RATE = 44
+FRAME_RATE = 10 #44
MIN_VALUE = 0
MAX_VALUE = 1
MAX_TIME = 4
MIN_TIME = 0.3
-MAX_HUE = 169 / 360
+MAX_HUE = 230 / 360
MIN_HUE = 250 / 360
+class Panel(object):
+ def __init__(self, light):
+ self.light = light
+ self.current_color = color.RGB(0, 0, 0)
+ self.target_color = color.RGB(0, 0, 0)
+ self.delta = color.RGB(1, 1, 1)
+
+ def begin_transition(self, target_color, delta_ticks):
+ self.target_color = target_color
+ self.delta = (self.target_color - self.current_color) / delta_ticks
+
+ def tick(self):
+ self.current_color = self.current_color + self.delta
+ self.light.setRGBRaw(*self.current_color.components)
+
+ def transition_complete(self):
+ return abs(self.current_color - self.target_color) < abs(self.delta)
+
+
+
def get_all_lights(rig):
"""Return a list of all panels."""
return [
- rig.select('$side={}[$sequence={}]'.format(j, i))
+ Panel(rig.select('$side={}[$sequence={}]'.format(j, i)))
for j in ['top', 'bot'] for i in range(1, 200)
]
@@ -27,7 +47,7 @@ def get_all_lights(rig):
def pick_HSV():
"""Return a random color in an appropriate interval."""
hue = random.random() * (MAX_HUE - MIN_HUE) + MIN_HUE
- saturation = random.random()
+ saturation = random.random() * (1 - 0.63) + 0.63
value = random.random()
return color.HSV(hue, saturation, value)
@@ -38,44 +58,30 @@ def transition(start, end, step):
def random_change():
- """Return a random amount that a light should change each frame."""
- min_time = int(MIN_TIME * FRAME_RATE)
- max_time = int(MAX_TIME * FRAME_RATE)
- return 1 / random.randint(min_time, max_time)
+ """Return a random number of ticks for a light to change"""
+ min_ticks = int(MIN_TIME * FRAME_RATE)
+ max_ticks = int(MAX_TIME * FRAME_RATE)
+ return random.randint(min_ticks, max_ticks)
def demo(lights, rig):
"""Do some light things."""
- light_status = [
- {
- 'change': 0,
- 'light': light,
- 'current value': color.RGB(0, 0, 0),
- 'transitioning to': color.RGB(0, 0, 0),
- }
- for light in lights
- ]
while True:
- for light_s in light_status:
- change = light_s['change']
- light = light_s['light']
- current_value = light_s['current value']
- transitioning_to = light_s['transitioning to']
- if abs(transitioning_to - current_value) < change:
- change = random_change()
- light_s['change'] = change
- transitioning_to = pick_HSV().to_RGB()
- light_s['transitioning to'] = transitioning_to
- new_color = transition(current_value, transitioning_to, change)
- light.setRGBRaw(*new_color.components)
- light_s['current value'] = new_color
+ print "Tick"
+ for light in lights:
+ if light.transition_complete():
+ if( light == lights[0] ):
+ print "Transition complete!"
+ light.begin_transition(pick_HSV().to_RGB(), random_change())
+ light.tick()
+
rig.updateOnce()
time.sleep(1 / FRAME_RATE)
def main():
"""Run show."""
- rig = lumiversepython.Rig('/home/teacher/Lumiverse/PBridge.rig.json')
+ rig = DummyRig(200, 2) #lumiversepython.Rig('/home/teacher/Lumiverse/PBridge.rig.json')
rig.init()
lights = get_all_lights(rig)
demo(lights, rig)