# Programme WS2812_04 
# Allume les LED avec un effet de trainée lumineuse 

# Importation des bibliothèques utilisées par le script
from time import sleep
from rpi_ws281x import *

# Configuration du ruban/anneau de LED:
LED_COUNT      = 12      # Nombre de LED sur le ruban/anneau.
LED_PIN        = 18      # Broche GPIO connectée au ruban/anneau (18 = PWM).
LED_FREQ_HZ    = 800000  # Fréquence du signal envoyé aux LED (800khz)
LED_DMA        = 10      # Canal DMA utilisé pour générer le signal
LED_BRIGHTNESS = 255     # 0 = éteint - 255 = maxi
LED_INVERT     = False   # Mettre True pour inverser le signal (utilisation d'un transistor en sortie)
LED_CHANNEL    = 0       # Mettre à 1 pour les GPIO 13, 19, 41, 45 ou 53

# Temporisation à régler - vitesse de défilement
tempo = 0.08

# Créer le ruban/anneau avec les éléments de configuration
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
# Initialisation de la bibliothèque. A appeler avant toute utilisation
strip.begin()


# Creer tableau de LED de 12 lignes et 3 colonnes
led = [[0 for valeur in range(3)] for ligne in range (12)]

# Eteindre les LED
for pos in range (12):
    strip.setPixelColor(pos, Color(led[pos][0], led[pos][1], led[pos][2]))
    strip.show()

# Boucle du programme
while True:    
    # Configurer la luminosité de 4 LED
    for pos in range (12):
        # Allume en vert
        led [(pos+3)%12][0]= 0
        led [(pos+3)%12][1]= 255
        led [(pos+3)%12][2]= 0
        led [(pos+2)%12][1] = 75 
        led [(pos+1)%12][1] = 35 
        led [pos][1] = 10

        # Impression du tableau - utilisé pour les tests
        #print (led) 

        # Transférer les valeurs de chaque LED à la bibliothèque
        for i in range (12):
            strip.setPixelColor(i, Color(led[i][0], led[i][1], led[i][2]))
        strip.show()
        sleep(tempo)

        # Eteindre les LED précédemment allumées
        led [pos][1]= 0
        led [(pos+1)%12][1] = 0 
        led [(pos+2)%12][1] = 0 
        led [(pos+3)%12][1] = 0 

        for i in range (12):
            strip.setPixelColor(i, Color(led[i][0], led[i][1], led[i][2]))
        strip.show()
