2020-05-29 21:19:29 +02:00
|
|
|
from __future__ import division
|
2020-05-12 19:52:46 +02:00
|
|
|
import hyperion, time, colorsys, math
|
|
|
|
|
|
|
|
hyperion.imageMinSize(64, 64)
|
|
|
|
width = hyperion.imageWidth()
|
|
|
|
height = hyperion.imageHeight()
|
|
|
|
sleepTime = float(hyperion.args.get('sleepTime', 0.2))
|
|
|
|
|
|
|
|
def mapto(x, in_min, in_max, out_min, out_max):
|
|
|
|
return float((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
|
|
|
|
|
|
|
|
pal = []
|
|
|
|
for h in range(256):
|
|
|
|
r, g, b = colorsys.hsv_to_rgb(mapto(h, 0.0, 255.0, 0.0, 1.0), 1.0, 1.0)
|
|
|
|
pal.append( bytearray( (int(r*255), int(g*255), int(b*255)) ) )
|
|
|
|
|
|
|
|
plasma = [[]]
|
|
|
|
for x in range(width):
|
|
|
|
plasma.append([])
|
|
|
|
for y in range(height):
|
|
|
|
color = int(128.0 + (128.0 * math.sin(x / 16.0)) + \
|
|
|
|
128.0 + (128.0 * math.sin(y / 8.0)) + \
|
|
|
|
128.0 + (128.0 * math.sin((x+y)) / 16.0) + \
|
|
|
|
128.0 + (128.0 * math.sin(math.sqrt(x**2.0 + y**2.0) / 8.0))) / 4
|
|
|
|
plasma[x].append(color)
|
|
|
|
|
|
|
|
while not hyperion.abort():
|
|
|
|
ledData = bytearray()
|
2020-05-29 21:19:29 +02:00
|
|
|
mod = time.process_time() * 100
|
2020-05-12 19:52:46 +02:00
|
|
|
for x in range(height):
|
|
|
|
for y in range(width):
|
|
|
|
ledData += pal[int((plasma[y][x] + mod) % 256)]
|
|
|
|
|
|
|
|
hyperion.setImage(width,height,ledData)
|
|
|
|
time.sleep(sleepTime)
|
|
|
|
|