def effect(): # trigger effect for i in range(steps_per * 8): for y in range(8): for x in range(8): r, g, b = background(x, y, i) r = int(max(0, min(255, r))) g = int(max(0, min(255, g))) b = int(max(0, min(255, b))) rainbow.set_pixel(x, y, r, g, b) rainbow.show() time.sleep(0.01) for i in range(200): v = (math.sin(i / 6.0) + 1.0) / 2.0 for y in range(8): for x in range(8): r = 0 b = 0 g = 100 g *= tick_mask[y][x] g *= v r = int(max(0, min(255, r))) g = int(max(0, min(255, g))) b = int(max(0, min(255, b))) rainbow.set_pixel(x, y, r, g, b) rainbow.show() time.sleep(0.02)
def step(): global i i = 0 if i>=100*len(ASCIIPIC) else i+1 # avoid overflow for h in range(height): for w in range(width): hPos = (i+h) % len(ASCIIPIC) chr = ASCIIPIC[hPos][w] if chr == ' ': rainbow.set_pixel(w, h, 0, 0, 0) else: rainbow.set_pixel(w, h, 255, 0, 0) rainbow.show()
def setup(): global heights heights = [] for b in range(0, 6): heights.append(0) uh.off() for b in range(0, 8): uh.set_pixel(0, b, 255, 255, 255) for b in range(0, 8): uh.set_pixel(7, b, 255, 255, 255) for b in range(1, 7): uh.set_pixel(b, 0, 255, 255, 255) uh.show()
def update_display(): # keep track of the row we are updating c = row_pointer for h in range(height): for w in range(width): # val is between 50 and 255 val = rows[c][w] # invert coordinates rainbow.set_pixel((width - 1) - w, (height - 1) - h, val, val, val) c += 1 if c > height - 1: c = 0 rainbow.show()
def drop_ball(): ball_colour = [randint(100, 255), randint(100, 255), randint(100, 255)] ball_column = randint(0, 5) while heights[ball_column] == 7: ball_column = randint(0, 5) height = heights[ball_column] ball_y = 7 uh.set_pixel(ball_column + 1, ball_y, ball_colour[0], ball_colour[1], ball_colour[2]) uh.show() dropcount = 6 - height for y in range(0, dropcount): uh.set_pixel(ball_column + 1, ball_y, 0, 0, 0) ball_y -= 1 uh.set_pixel(ball_column + 1, ball_y, ball_colour[0], ball_colour[1], ball_colour[2]) uh.show() time.sleep(0.02) heights[ball_column] += 1
def toggle(tog): #toggle has been called determine state if tog: #randomise red, green and blue r = randint(30, 255) g = randint(30, 255) b = randint(30, 255) msg = "On!" else: #clear red, green and blue r = 0 g = 0 b = 0 msg = "Off!" #print the relevant message print(msg, r, g, b) #set the LEDs to the relevant lighting (all on/off) for y in range(height): for x in range(width): rainbow.set_pixel(x, y, r, g, b) rainbow.show() #return the inverse boolean variable that was passed in return not tog
def clear(): for y in range(8): for x in range(8): rainbow.set_pixel(x, y, 0, 0, 0) rainbow.show()
import time, colorsys import numpy as np rainbow.brightness(0.5) def make_gaussian(fwhm): x = np.arange(0, 8, 1, float) y = x[:, np.newaxis] x0, y0 = 3.5, 3.5 fwhm = fwhm gauss = np.exp(-4 * np.log(2) * ((x - x0)**2 + (y - y0)**2) / fwhm**2) return gauss while True: fwhm = 5 gauss = make_gaussian(fwhm) for y in range(8): for x in range(8): h = 0.1 s = 1.0 v = gauss[x, y] rgb = colorsys.hsv_to_rgb(h, s, v) r = int(rgb[0] * 255.0) g = int(rgb[1] * 255.0) b = int(rgb[2] * 255.0) rainbow.set_pixel(x, y, r, g, b) rainbow.show() time.sleep(0.005)
def show(self): rainbow.show()