forked from pvx/litsimaja
Added new program.
This commit is contained in:
63
pyleds/program/peter/MegaMix.py
Normal file
63
pyleds/program/peter/MegaMix.py
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
# MegaMix
|
||||
# Mis m6tted tulevad kui kuuled "MegaMix"?
|
||||
# m6tlen et millal jooma saaks hakata
|
||||
|
||||
from lib.Program import Program
|
||||
import time
|
||||
import random
|
||||
|
||||
|
||||
def name():
|
||||
return 'MegaMix'
|
||||
|
||||
|
||||
class MegaMix(Program):
|
||||
|
||||
preset_colors = ["ffa500", "e56717", "e18b6b", "c36241", "ed9121", "f5deb3", "c35817", "ff8400", "efb261",
|
||||
"c78023", "cc6600", "e66c2c", "ff8040", "ff7f50", "ffc594", "f88158", "e67451", "fc7f03",
|
||||
"deaa88", "f87217", "db4200", "ff7e75"]
|
||||
current_colors = []
|
||||
|
||||
# from https://chase-seibert.github.io/blog/2011/07/29/python-calculate-lighterdarker-rgb-colors.html
|
||||
# edited to my own liking
|
||||
def color_variant(self, hex_color, brightness_offset = 1):
|
||||
""" takes a color like #87c95f and produces a lighter or darker variant """
|
||||
if len(hex_color) != 6:
|
||||
print("Passed %s into color_variant(), needs to be in 87c95f format." % hex_color)
|
||||
return "000000"
|
||||
rgb_hex = [hex_color[x:x+2] for x in [0, 2, 4]]
|
||||
new_rgb_int = [int(hex_value, 16) + brightness_offset for hex_value in rgb_hex]
|
||||
new_rgb_int = [min([255, max([0, i])]) for i in new_rgb_int] # make sure new values are between 0 and 255
|
||||
# hex() produces "0x88", we want just "88"
|
||||
new_hex_list = [hex(i)[2:].zfill(2) for i in new_rgb_int]
|
||||
new_hex = "".join(new_hex_list)
|
||||
return new_hex
|
||||
|
||||
def disco(self, wait_ms):
|
||||
total_length = self._lm.count_pixels()
|
||||
for p in range(total_length):
|
||||
if len(self.current_colors) == total_length:
|
||||
color = self.current_colors[p]
|
||||
color = int(self.color_variant(color, random.randint(1, 10)), 16)
|
||||
if color >= 16777215:
|
||||
color = int(random.choice(self.preset_colors), 16)
|
||||
self.current_colors[p] = hex(color)[2:]
|
||||
else:
|
||||
color = int(random.choice(self.preset_colors), 16)
|
||||
self.current_colors.append(hex(color)[2:])
|
||||
self._lm.set_pixel_color(p, color)
|
||||
self._lm.show()
|
||||
time.sleep(wait_ms / 1000.0)
|
||||
|
||||
# Main program logic follows:
|
||||
def run(self, args=None):
|
||||
loop = False
|
||||
if 'loop' in args and args['loop']:
|
||||
loop = args['loop']
|
||||
|
||||
while self.get_loop().status():
|
||||
self.disco(300)
|
||||
|
||||
if not loop:
|
||||
break
|
||||
Reference in New Issue
Block a user