commit dcbc4d1e33f571d688f5f065b058a44566887064 Author: dbroqua Date: Mon Feb 22 17:06:15 2021 +0100 First commit diff --git a/raspi-color.py b/raspi-color.py new file mode 100644 index 0000000..1af19db --- /dev/null +++ b/raspi-color.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# rpi_ws281x library strandtest example +# Initial author: Tony DiCola (tony@tonydicola.com) +# Author: Damien Broqua (contact@darkou.fr) + +import time +from rpi_ws281x import * +import argparse +import RPi.GPIO as GPIO + +# LED strip configuration: +LED_COUNT = 60 # Number of LED pixels. +LED_PIN = 18 # GPIO pin connected to the pixels (18 uses PWM!). +LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz) +LED_DMA = 10 # DMA channel to use for generating signal (try 10) +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_DISPLAY = True +BUTTON = 16 + + +def handlePushButton(button): + global LED_DISPLAY + LED_DISPLAY = not LED_DISPLAY + print ('Pushed !') + +# 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) + +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) + +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)) + if LED_DISPLAY == False: + break + strip.show() + time.sleep(wait_ms/1000.0) + if LED_DISPLAY == False: + break + +# Main program logic follows: +if __name__ == '__main__': + global BUTTON + # 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() + + GPIO.setmode(GPIO.BOARD) + GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) + GPIO.add_event_detect(BUTTON, GPIO.FALLING, callback=handlePushButton, bouncetime=250) + + print ('Press Ctrl-C to quit.') + if not args.clear: + print('Use "-c" argument to clear LEDs on exit') + + try: + + while True: + if LED_DISPLAY == True: + rainbowCycle(strip) + else: + colorWipe(strip, Color(0,0,0), 10) + + except KeyboardInterrupt: + if args.clear: + print("Done") + colorWipe(strip, Color(0,0,0), 10) diff --git a/raspi-color.service b/raspi-color.service new file mode 100644 index 0000000..5482ddf --- /dev/null +++ b/raspi-color.service @@ -0,0 +1,16 @@ +[Unit] +Description=RGB leds +After= + +[Service] +Type=simple +User=root +Group=root +UMask=007 +WorkingDirectory=/home/pi/ +ExecStart=python3 /home/pi/raspi-color.py +Restart=on-failure +TimeoutStopSec=300 + +[Install] +WantedBy=multi-user.target