# Démo simple des lampes LED RGB adressables de type WS2801 / SPI.
importation temps
importation RPi.GPIO comme GPIO
# Importez le module WS2801.
importation Adafruit_WS2801
importation Adafruit_GPIO.SPI comme SPI
# Configurez le nombre de pixels:
PIXEL_COUNT = 32
# Vous pouvez également spécifier une connexion SPI matérielle sur /dev/spidev0.0:
SPI_PORT = 0
SPI_DEVICE = 0
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO)
# Définissez la fonction de roue pour interpoler entre différentes teintes.
def roue(pos):
si pos < 85:
revenir Adafruit_WS2801.RGB_to_color(pos * 3, 255 – pos * 3, 0)
elif pos < 170:
pos – = 85
revenir Adafruit_WS2801.RGB_to_color(255 – pos * 3, 0, pos * 3)
autre:
pos – = 170
revenir Adafruit_WS2801.RGB_to_color(0, pos * 3, 255 – pos * 3)
# Définissez la fonction du cycle arc-en-ciel pour effectuer un cycle de toutes les teintes.
def rainbow_cycle_successive(pixels, attendre=0,1):
pour je dans gamme(pixels.compter()):
# mathématiques difficiles! nous utilisons chaque pixel comme une fraction de la roue complète de 96 couleurs
# (c’est la partie i / strip.numPixels ())
# Ajoutez ensuite j qui fait tourner les couleurs par pixel
# le% 96 est de faire tourner la roue
pixels.set_pixel(je, roue(((je * 256 // pixels.compter())) % 256) )
pixels.spectacle()
si attendre > 0:
temps.dormir(attendre)
def rainbow_cycle(pixels, attendre=0,005):
pour j dans gamme(256): # un cycle de 256 couleurs dans la roue
pour je dans gamme(pixels.compter()):
pixels.set_pixel(je, roue(((je * 256 // pixels.compter()) + j) % 256) )
pixels.spectacle()
si attendre > 0:
temps.dormir(attendre)
def rainbow_colors(pixels, attendre=0,05):
pour j dans gamme(256): # un cycle de 256 couleurs dans la roue
pour je dans gamme(pixels.compter()):
pixels.set_pixel(je, roue(((256 // pixels.compter() + j)) % 256) )
pixels.spectacle()
si attendre > 0:
temps.dormir(attendre)
def luminosité_diminuer(pixels, attendre=0,01, étape=1):
pour j dans gamme(int(256 // étape)):
pour je dans gamme(pixels.compter()):
r, g, b = pixels.get_pixel_rgb(je)
r = int(max(0, r – étape))
g = int(max(0, g – étape))
b = int(max(0, b – étape))
pixels.set_pixel(je, Adafruit_WS2801.RGB_to_color( r, g, b ))
pixels.spectacle()
si attendre > 0:
temps.dormir(attendre)
def blink_color(pixels, blink_times=5, attendre=0,5, Couleur=(255,0,0)):
pour je dans gamme(blink_times):
# clignote deux fois, puis attendez
pixels.clair()
pour j dans gamme(2):
pour k dans gamme(pixels.compter()):
pixels.set_pixel(k, Adafruit_WS2801.RGB_to_color( Couleur[[0], Couleur[[1], Couleur[[2] ))
pixels.spectacle()
temps.dormir(0,08)
pixels.clair()
pixels.spectacle()
temps.dormir(0,08)
temps.dormir(attendre)
def appear_from_back(pixels, Couleur=(255, 0, 0)):
pos = 0
pour je dans gamme(pixels.compter()):
pour j dans renversé(gamme(je, pixels.compter())):
pixels.clair()
# définissez d’abord tous les pixels au début
pour k dans gamme(je):
pixels.set_pixel(k, Adafruit_WS2801.RGB_to_color( Couleur[[0], Couleur[[1], Couleur[[2] ))
# place alors le pixel à la position j
pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color( Couleur[[0], Couleur[[1], Couleur[[2] ))
pixels.spectacle()
temps.dormir(0,02)
si __Nom__ == « __principale__ »:
# Effacez tous les pixels pour les désactiver.
pixels.clair()
pixels.spectacle() # Assurez-vous d’appeler show () après avoir changé les pixels!
rainbow_cycle_successive(pixels, attendre=0,1)
rainbow_cycle(pixels, attendre=0,01)
luminosité_diminuer(pixels)
appear_from_back(pixels)
pour je dans gamme(3):
blink_color(pixels, blink_times = 1, Couleur=(255, 0, 0))
blink_color(pixels, blink_times = 1, Couleur=(0, 255, 0))
blink_color(pixels, blink_times = 1, Couleur=(0, 0, 255))
rainbow_colors(pixels)
luminosité_diminuer(pixels)