2016-10-12 14:50:00 -07:00
|
|
|
from __future__ import print_function
|
|
|
|
import time
|
|
|
|
import socket
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
# Nonlinear brightness correction
|
|
|
|
lookup_table = np.load('lookup_table.npy')
|
|
|
|
N_pixels = 240
|
|
|
|
m = None
|
|
|
|
|
|
|
|
# Socket communication settings
|
|
|
|
UDP_IP = "192.168.0.100"
|
|
|
|
UDP_PORT = 7777
|
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
|
|
|
|
|
|
|
|
|
|
def set_all(R, G, B):
|
|
|
|
for i in range(N_pixels):
|
|
|
|
set_pixel(i, R, G, B)
|
|
|
|
update_pixels()
|
|
|
|
|
|
|
|
|
|
|
|
def set_from_array(x):
|
|
|
|
dt = 2.0 * np.pi / N_pixels
|
|
|
|
t = time.time() * 1.5
|
|
|
|
def r(t): return (np.sin(t + 0.0) + 1.0) * 1.0 / 2.0
|
|
|
|
def g(t): return (np.sin(t + (2.0 / 3.0) * np.pi) + 1.0) * 1.0 / 2.0
|
|
|
|
def b(t): return (np.sin(t + (4.0 / 3.0) * np.pi) + 1.0) * 1.0 / 2.0
|
|
|
|
for n in range(N_pixels):
|
|
|
|
set_pixel(N=n,
|
|
|
|
R=r(n * dt + t) * x[n],
|
|
|
|
G=g(n * dt + t) * x[n],
|
|
|
|
B=b(n * dt + t) * x[n],
|
|
|
|
nonlinear_correction=True)
|
|
|
|
update_pixels()
|
|
|
|
|
|
|
|
|
|
|
|
def set_pixel(N, R, G, B, nonlinear_correction=True):
|
|
|
|
global m
|
|
|
|
r = int(min(max(R, 0), 255))
|
|
|
|
g = int(min(max(G, 0), 255))
|
|
|
|
b = int(min(max(B, 0), 255))
|
|
|
|
if nonlinear_correction:
|
|
|
|
r = lookup_table[r]
|
|
|
|
g = lookup_table[g]
|
|
|
|
b = lookup_table[b]
|
|
|
|
if m is None:
|
|
|
|
m = chr(N) + chr(r) + chr(g) + chr(b)
|
|
|
|
else:
|
|
|
|
m += chr(N) + chr(r) + chr(g) + chr(b)
|
|
|
|
|
|
|
|
|
|
|
|
def update_pixels():
|
|
|
|
global m
|
|
|
|
sock.sendto(m, (UDP_IP, UDP_PORT))
|
|
|
|
m = None
|
|
|
|
|
|
|
|
|
|
|
|
def rainbow(brightness=255.0, speed=1.0, fps=10):
|
|
|
|
offset = 132
|
|
|
|
dt = 2.0 * np.pi / N_pixels
|
|
|
|
def r(t): return (np.sin(t + 0.0) + 1.0) * brightness / 2.0 + offset
|
|
|
|
def g(t): return (np.sin(t + (2.0 / 3.0) * np.pi) + 1.0) * brightness / 2.0 + offset
|
|
|
|
def b(t): return (np.sin(t + (4.0 / 3.0) * np.pi) + 1.0) * brightness / 2.0 + offset
|
|
|
|
while True:
|
2016-10-12 16:02:06 -07:00
|
|
|
t = time.time() * speed
|
2016-10-12 14:50:00 -07:00
|
|
|
for n in range(N_pixels):
|
|
|
|
T = t + n * dt
|
|
|
|
set_pixel(N=n, R=r(T), G=g(T), B=b(T))
|
|
|
|
update_pixels()
|
|
|
|
time.sleep(1.0 / fps)
|
|
|
|
|
2016-10-12 16:02:06 -07:00
|
|
|
|
2016-10-12 14:50:00 -07:00
|
|
|
if __name__ == '__main__':
|
|
|
|
for i in range(N_pixels):
|
|
|
|
set_all(0, 0, 0)
|
2016-10-12 16:02:06 -07:00
|
|
|
# rainbow(speed=0.025, fps=40, brightness=0)
|