-
Notifications
You must be signed in to change notification settings - Fork 626
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixed strandtest.py #258
Merged
Merged
Fixed strandtest.py #258
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
0a87807
Fixed keyboardinterrupt, indentation inconsistency, & a few other min…
TheTechromancer 18832d7
Fixed KeyboardInterrupt. Again.
TheTechromancer 4164dcd
KeyboardInterrupt works now. For sure.
TheTechromancer 09cc2a1
Tabs to spaces, removed redundant signal handling
TheTechromancer 88bd3b0
Removed unused sys module import
TheTechromancer File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,14 @@ | ||
#!/usr/bin/env python3 | ||
# NeoPixel library strandtest example | ||
# Author: Tony DiCola ([email protected]) | ||
# | ||
# Direct port of the Arduino NeoPixel library strandtest example. Showcases | ||
# various animations on a strip of NeoPixels. | ||
import time | ||
|
||
import time | ||
from neopixel import * | ||
|
||
from rpi_ws281x.rpi_ws281x import ws | ||
import argparse | ||
import signal | ||
import sys | ||
def signal_handler(signal, frame): | ||
colorWipe(strip, Color(0,0,0)) | ||
sys.exit(0) | ||
|
||
def opt_parse(): | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument('-c', action='store_true', help='clear the display on exit') | ||
args = parser.parse_args() | ||
if args.c: | ||
signal.signal(signal.SIGINT, signal_handler) | ||
|
||
# LED strip configuration: | ||
LED_COUNT = 16 # Number of LED pixels. | ||
|
@@ -30,88 +19,98 @@ def opt_parse(): | |
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest | ||
LED_INVERT = False # True to invert the signal (when using NPN transistor level shift) | ||
LED_CHANNEL = 0 # set to '1' for GPIOs 13, 19, 41, 45 or 53 | ||
LED_STRIP = ws.WS2811_STRIP_GRB # Strip type and colour ordering | ||
|
||
|
||
|
||
# Define functions which animate LEDs in various ways. | ||
def colorWipe(strip, color, wait_ms=50): | ||
"""Wipe color across display a pixel at a time.""" | ||
for i in range(strip.numPixels()): | ||
strip.setPixelColor(i, color) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
"""Wipe color across display a pixel at a time.""" | ||
for i in range(strip.numPixels()): | ||
strip.setPixelColor(i, color) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
|
||
def theaterChase(strip, color, wait_ms=50, iterations=10): | ||
"""Movie theater light style chaser animation.""" | ||
for j in range(iterations): | ||
for q in range(3): | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, color) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, 0) | ||
"""Movie theater light style chaser animation.""" | ||
for j in range(iterations): | ||
for q in range(3): | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, color) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, 0) | ||
|
||
def wheel(pos): | ||
"""Generate rainbow colors across 0-255 positions.""" | ||
if pos < 85: | ||
return Color(pos * 3, 255 - pos * 3, 0) | ||
elif pos < 170: | ||
pos -= 85 | ||
return Color(255 - pos * 3, 0, pos * 3) | ||
else: | ||
pos -= 170 | ||
return Color(0, pos * 3, 255 - pos * 3) | ||
"""Generate rainbow colors across 0-255 positions.""" | ||
if pos < 85: | ||
return Color(pos * 3, 255 - pos * 3, 0) | ||
elif pos < 170: | ||
pos -= 85 | ||
return Color(255 - pos * 3, 0, pos * 3) | ||
else: | ||
pos -= 170 | ||
return Color(0, pos * 3, 255 - pos * 3) | ||
|
||
def rainbow(strip, wait_ms=20, iterations=1): | ||
"""Draw rainbow that fades across all pixels at once.""" | ||
for j in range(256*iterations): | ||
for i in range(strip.numPixels()): | ||
strip.setPixelColor(i, wheel((i+j) & 255)) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
"""Draw rainbow that fades across all pixels at once.""" | ||
for j in range(256*iterations): | ||
for i in range(strip.numPixels()): | ||
strip.setPixelColor(i, wheel((i+j) & 255)) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
|
||
def rainbowCycle(strip, wait_ms=20, iterations=5): | ||
"""Draw rainbow that uniformly distributes itself across all pixels.""" | ||
for j in range(256*iterations): | ||
for i in range(strip.numPixels()): | ||
strip.setPixelColor(i, wheel((int(i * 256 / strip.numPixels()) + j) & 255)) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
"""Draw rainbow that uniformly distributes itself across all pixels.""" | ||
for j in range(256*iterations): | ||
for i in range(strip.numPixels()): | ||
strip.setPixelColor(i, wheel((int(i * 256 / strip.numPixels()) + j) & 255)) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
|
||
def theaterChaseRainbow(strip, wait_ms=50): | ||
"""Rainbow movie theater light style chaser animation.""" | ||
for j in range(256): | ||
for q in range(3): | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, wheel((i+j) % 255)) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, 0) | ||
"""Rainbow movie theater light style chaser animation.""" | ||
for j in range(256): | ||
for q in range(3): | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, wheel((i+j) % 255)) | ||
strip.show() | ||
time.sleep(wait_ms/1000.0) | ||
for i in range(0, strip.numPixels(), 3): | ||
strip.setPixelColor(i+q, 0) | ||
|
||
# Main program logic follows: | ||
if __name__ == '__main__': | ||
# Process arguments | ||
opt_parse() | ||
|
||
# Create NeoPixel object with appropriate configuration. | ||
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL, LED_STRIP) | ||
# Intialize the library (must be called once before other functions). | ||
strip.begin() | ||
|
||
print ('Press Ctrl-C to quit.') | ||
while True: | ||
print ('Color wipe animations.') | ||
colorWipe(strip, Color(255, 0, 0)) # Red wipe | ||
colorWipe(strip, Color(0, 255, 0)) # Blue wipe | ||
colorWipe(strip, Color(0, 0, 255)) # Green wipe | ||
print ('Theater chase animations.') | ||
theaterChase(strip, Color(127, 127, 127)) # White theater chase | ||
theaterChase(strip, Color(127, 0, 0)) # Red theater chase | ||
theaterChase(strip, Color( 0, 0, 127)) # Blue theater chase | ||
print ('Rainbow animations.') | ||
rainbow(strip) | ||
rainbowCycle(strip) | ||
theaterChaseRainbow(strip) | ||
# Process arguments | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument('-c', '--clear', action='store_true', help='clear the display on exit') | ||
args = parser.parse_args() | ||
|
||
# Create NeoPixel object with appropriate configuration. | ||
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL) | ||
# Intialize the library (must be called once before other functions). | ||
strip.begin() | ||
|
||
print ('Press Ctrl-C to quit.') | ||
if not args.clear: | ||
print('Use "-c" argument to clear LEDs on exit') | ||
|
||
try: | ||
|
||
while True: | ||
print ('Color wipe animations.') | ||
colorWipe(strip, Color(255, 0, 0)) # Red wipe | ||
colorWipe(strip, Color(0, 255, 0)) # Blue wipe | ||
colorWipe(strip, Color(0, 0, 255)) # Green wipe | ||
print ('Theater chase animations.') | ||
theaterChase(strip, Color(127, 127, 127)) # White theater chase | ||
theaterChase(strip, Color(127, 0, 0)) # Red theater chase | ||
theaterChase(strip, Color( 0, 0, 127)) # Blue theater chase | ||
print ('Rainbow animations.') | ||
rainbow(strip) | ||
rainbowCycle(strip) | ||
theaterChaseRainbow(strip) | ||
|
||
except KeyboardInterrupt: | ||
if args.clear: | ||
colorWipe(strip, Color(0,0,0), 10) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be imported and preserved to ensure the difference between WS2811 and SK6812 pixels is clear to anyone hacking on this code.