#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Importation des bibliothèques utilisées par le script
from gpiozero import RGBLED, Button
from colorzero import Color
from time import sleep
from signal import pause

# Cette bibliothèque permet de créer une file d'attente pour ranger les événements
# La file utilisée ici est de type FIFO = First In First Out = Premier entré Premier Sorti
import queue

# Créer la file d'attente FIFO
eventq = queue.Queue()

#Déclarer les entrées du codeur comme des boutons
pin_S2 = Button(24)                      
pin_S1 = Button(25)                      

# Déclaration de la LED RGB
led = RGBLED(16, 20, 21)

# Couleur de début de programme
i = 0

# Traitement du front montant de S1
def pin_S1_rising():                     
    if pin_S2.is_pressed: eventq.put(-1) 

# Traitement du front montant de S2
def pin_S2_rising():                    
    if pin_S1.is_pressed: eventq.put(1) 


# Fonction chargée d'afficher la couleur sur la LED
# La fonction reçoit la valeur du compteur en paramètre
# Pour déterminer la couleur à afficher
def affichage(n):
    #print("Valeur de n dans la fonction ",n)

    # Affichage de la couleur sur la LED RVB
    if n == 0 :
        led.color = Color('black')
    elif n == 1 :
        led.color = Color('blue')        
    elif n == 2 :
        led.color = Color('red')
    elif n == 3 :
        led.color = Color('green')
    elif n == 4 :
        led.color = Color('cyan')
    elif n == 5 :
        led.color = Color('yellow')
    elif n == 6 :
        led.color = Color('magenta')
    elif n == 7 :
        led.color = Color('white')

# Attente des événements lors de la rotation du bouton
pin_S1.when_pressed = pin_S1_rising      
pin_S2.when_pressed = pin_S2_rising      


while True:
    # Affichage d'une valeur en sortie de la file d'attente FIFO        
    message = eventq.get()
    #print("Sortie de FIFO : ",message)
    i = i + message
    #print("Valeur brute du compteur : ",i)

    # Gestion de la valeur modulo 8
    compteur = i%8
    #print("valeur compteur modulo 8: ", compteur)
    affichage(compteur)

pause()

