Created
June 16, 2018 22:37
-
-
Save Iteratix/176050ed8391cfc9e9de20741cfe31c1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Simple demo of of the WS2801/SPI-like addressable RGB LED lights. | |
import time | |
import RPi.GPIO as GPIO | |
# Import the WS2801 module. | |
import Adafruit_WS2801 | |
import Adafruit_GPIO.SPI as SPI | |
# Configure the count of pixels: | |
PIXEL_COUNT = 32 | |
# Alternatively specify a hardware SPI connection on /dev/spidev0.0: | |
SPI_PORT = 0 | |
SPI_DEVICE = 0 | |
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO) | |
# Define the wheel function to interpolate between different hues. | |
def wheel(pos): | |
if pos < 85: | |
return Adafruit_WS2801.RGB_to_color(pos * 3, 255 - pos * 3, 0) | |
elif pos < 170: | |
pos -= 85 | |
return Adafruit_WS2801.RGB_to_color(255 - pos * 3, 0, pos * 3) | |
else: | |
pos -= 170 | |
return Adafruit_WS2801.RGB_to_color(0, pos * 3, 255 - pos * 3) | |
# Define rainbow cycle function to do a cycle of all hues. | |
def rainbow_cycle_successive(pixels, wait=0.1): | |
for i in range(pixels.count()): | |
# tricky math! we use each pixel as a fraction of the full 96-color wheel | |
# (thats the i / strip.numPixels() part) | |
# Then add in j which makes the colors go around per pixel | |
# the % 96 is to make the wheel cycle around | |
pixels.set_pixel(i, wheel(((i * 256 // pixels.count())) % 256) ) | |
pixels.show() | |
if wait > 0: | |
time.sleep(wait) | |
def rainbow_cycle(pixels, wait=0.005): | |
for j in range(256): # one cycle of all 256 colors in the wheel | |
for i in range(pixels.count()): | |
pixels.set_pixel(i, wheel(((i * 256 // pixels.count()) + j) % 256) ) | |
pixels.show() | |
if wait > 0: | |
time.sleep(wait) | |
def rainbow_colors(pixels, wait=0.05): | |
for j in range(256): # one cycle of all 256 colors in the wheel | |
for i in range(pixels.count()): | |
pixels.set_pixel(i, wheel(((256 // pixels.count() + j)) % 256) ) | |
pixels.show() | |
if wait > 0: | |
time.sleep(wait) | |
def brightness_decrease(pixels, wait=0.01, step=1): | |
for j in range(int(256 // step)): | |
for i in range(pixels.count()): | |
r, g, b = pixels.get_pixel_rgb(i) | |
r = int(max(0, r - step)) | |
g = int(max(0, g - step)) | |
b = int(max(0, b - step)) | |
pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color( r, g, b )) | |
pixels.show() | |
if wait > 0: | |
time.sleep(wait) | |
def blink_color(pixels, blink_times=5, wait=0.5, color=(255,0,0)): | |
for i in range(blink_times): | |
# blink two times, then wait | |
pixels.clear() | |
for j in range(2): | |
for k in range(pixels.count()): | |
pixels.set_pixel(k, Adafruit_WS2801.RGB_to_color( color[0], color[1], color[2] )) | |
pixels.show() | |
time.sleep(0.08) | |
pixels.clear() | |
pixels.show() | |
time.sleep(0.08) | |
time.sleep(wait) | |
def appear_from_back(pixels, color=(255, 0, 0)): | |
pos = 0 | |
for i in range(pixels.count()): | |
for j in reversed(range(i, pixels.count())): | |
pixels.clear() | |
# first set all pixels at the begin | |
for k in range(i): | |
pixels.set_pixel(k, Adafruit_WS2801.RGB_to_color( color[0], color[1], color[2] )) | |
# set then the pixel at position j | |
pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color( color[0], color[1], color[2] )) | |
pixels.show() | |
time.sleep(0.02) | |
if __name__ == "__main__": | |
# Clear all the pixels to turn them off. | |
pixels.clear() | |
pixels.show() # Make sure to call show() after changing any pixels! | |
rainbow_cycle_successive(pixels, wait=0.1) | |
rainbow_cycle(pixels, wait=0.01) | |
brightness_decrease(pixels) | |
appear_from_back(pixels) | |
for i in range(3): | |
blink_color(pixels, blink_times = 1, color=(255, 0, 0)) | |
blink_color(pixels, blink_times = 1, color=(0, 255, 0)) | |
blink_color(pixels, blink_times = 1, color=(0, 0, 255)) | |
rainbow_colors(pixels) | |
brightness_decrease(pixels) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
is it possible to create a loop?