diff options
| author | Raymond Hogenson <rayhogenson@openmailbox.org> | 2016-09-18 23:26:06 -0400 |
|---|---|---|
| committer | Raymond Hogenson <rayhogenson@openmailbox.org> | 2016-09-18 23:26:06 -0400 |
| commit | 5c45fd2b0c83e50288184813e5b4724a391435de (patch) | |
| tree | f9f08c17d17f4d4a645efc724ed778be6f7052c8 /bridge.py | |
| download | bridge-5c45fd2b0c83e50288184813e5b4724a391435de.tar.zst | |
Add script from first meeting
The script kind of strobes the lights gently and the parameters are
configurable with global variables. Right now, the only color used is
blue.
Diffstat (limited to 'bridge.py')
| -rw-r--r-- | bridge.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/bridge.py b/bridge.py new file mode 100644 index 0000000..6e2ce02 --- /dev/null +++ b/bridge.py @@ -0,0 +1,80 @@ +#!/usr/bin/python +"""Simple demo of oscillating colors.""" +from __future__ import division +import lumiversepython +import random +import time + +FRAME_RATE = 44 +MIN_VALUE = 0 +MAX_VALUE = 1 +MAX_TIME = 4 +MIN_TIME = 0.3 + +def get_all_lights(rig): + """Return a list of all panels.""" + return [rig.select('$side={}[$sequence={}]'.format(j, i)) for j in ['top', 'bot'] for i in range(1, 200)] + + +def restrict(low, x, high): + """Return a value low <= v <= high, and equal to x if possible.""" + return max(low, min(x, high)) + + +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) + rands = [random.randint(min_time, max_time) for _ in range(5)] + rand_binom = sum(rands) / 5 + #inverse = (rand_binom - (MAX_VALUE - MIN_VALUE) / 2) % (MAX_VALUE - MIN_VALUE) + MIN_VALUE + return 1 / random.randint(min_time, max_time) + + +def demo(lights, rig): + """Do some light things.""" + light_status = [ + { + 'is_increasing': True, + 'change': random_change(), + 'light': light, + 'current_value': 0, + } + for light in lights + ] + while True: + for light_s in light_status: + is_increasing = light_s['is_increasing'] + change = light_s['change'] + light = light_s['light'] + current_value = light_s['current_value'] + new_value = restrict( + MIN_VALUE, current_value + change * (int(is_increasing) * 2 - 1), MAX_VALUE + ) + light.setRGBRaw(0, 0, new_value) + light_s['current_value'] = new_value + if new_value in [MIN_VALUE, MAX_VALUE]: + light_s['is_increasing'] = not is_increasing + light_s['change'] = random_change() + rig.updateOnce() + time.sleep(1 / FRAME_RATE) + + +def panels(lights, rig): + for light in lights: + light.setRGBRaw(1, 1, 1) + rig.updateOnce() + time.sleep(1) + light.setRGBRaw(0, 0, 0) + + +def main(): + """Run show.""" + rig = lumiversepython.Rig('/home/teacher/Lumiverse/PBridge.rig.json') + rig.init() + lights = get_all_lights(rig) + demo(lights, rig) + #panels(lights, rig) + +if __name__ == '__main__': + main() |
