würde ich ändern in
for i in range(start, stop, direction):
pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(hue, hue, hue))
pixels.show()
time.sleep(0.05)
(Einrückung natürlich korrekt gesetzt).
Das führt zu einem einfachem Schalten. Es kann auch so schnell kaskadierend sein, dass man es nicht sieht.
---
Der Fadecode funktioniert generell schon.
Es werden alle Lampen gleichmäßig gedimmt.
Also nicht kaskadierend. Meine Idee wäre jetzt, im ersten Anlauf jede LED etwas weniger hell zu setzen. Also jeder 5 weniger zu geben.
Dann würde ein Fadeout ja entsprechend kaskadierend wirken.
Oder nach Ablauf der ersten AN-kaskadierung die Werte auf je 5 weniger setzen (um zumindest am Anfang volles Licht zu haben). Und danach einfaches Fadeout.
1.LED 255,255,255
2.LED 250,250,250
...
import RPi.GPIO as GPIO
import time
import Adafruit_WS2801
import Adafruit_GPIO.SPI as SPI
GPIO.setmode(GPIO.BCM)
GPIO_TRIGGER1 = 18
GPIO_ECHO1 = 24
SENSOR_PIN2 = 22
GPIO.setup(SENSOR_PIN2, GPIO.IN)
GPIO.setup(GPIO_TRIGGER1, GPIO.OUT)
GPIO.setup(GPIO_ECHO1, GPIO.IN)
PIXEL_COUNT = 26
SPI_PORT = 0
SPI_DEVICE = 0
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
def lights(order='up', mode='on'):
start = 0
stop = pixels.count()
direction = 1
if order == 'down':
start = 25
stop = -1
direction = -1
hue = 0
if mode == 'on':
hue = 255
for i in range(start, stop, direction):
pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(hue, hue, hue))
pixels.show()
time.sleep(0.05)
def brightness_decrease(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 distanz():
# setze Trigger auf HIGH
GPIO.output(GPIO_TRIGGER1, True)
# setze Trigger nach 0.01ms aus LOW
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER1, False)
StartZeit = time.time()
StopZeit = time.time()
# speichere Startzeit
while GPIO.input(GPIO_ECHO1) == 0:
StartZeit = time.time()
# speichere Ankunftszeit
while GPIO.input(GPIO_ECHO1) == 1:
StopZeit = time.time()
# Zeit Differenz zwischen Start und Ankunft
TimeElapsed = StopZeit - StartZeit
# mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
# und durch 2 teilen, da hin und zurueck
distanz = (TimeElapsed * 34300) / 2
return distanz
def up(channel):
print('unten (bw)')
pixels.clear()
lights()
time.sleep(1)
lights(mode='off')
try:
GPIO.add_event_detect(SENSOR_PIN2 , GPIO.RISING, callback=up)
while True:
time.sleep(0.001)
abstand = distanz()
time.sleep(1.0)
if distanz() < 40:
print('oben us')
pixels.clear()
lights(order='down')
# von unten nach oben Licht an
time.sleep(2)
brightness_decrease()
#lights(order='down', mode='off')
except KeyboardInterrupt:
print "Beende..."
GPIO.cleanup()
Alles anzeigen
Es sind jetzt nur noch 26. Ich brauchte 6 für das andere Projekt