#Affiche avec un display 7 segments le code hexa 0 à 15 plus le point après 15.
import RPi.GPIO as GPIO
import time

pins = [11,12,13,15,16,18,22,7]
#pin 11 relié à A du display 7 segments
#pin 12 relié à B du display 7 segments
#pin 13 relié à C du display 7 segments
#pin 15 relié à D du display 7 segments
#pin 16 relié à E du display 7 segments
#pin 18 relié à F du display 7 segments
#pin 22 relié à G du display 7 segments
#pin 7 relié à dp du display 7 segments (le point)
dats = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80]

def setup(): #initialisation GPIO de la raspberry pi
	GPIO.setmode(GPIO.BOARD)
	for pin in pins: #Dans la liste pins va chercher les 8 pin utilisées
		GPIO.setup(pin, GPIO.OUT)   # Place les pins utilisées en output
		GPIO.output(pin, GPIO.LOW)  # Place les pins utilisées à 0 pour éteindre le display 

def writeOneByte(val): #val contient le code hexa
        GPIO.output(11, val & (0x01 << 0))  #(0x01 << 0)=1
        GPIO.output(12, val & (0x01 << 1))  #(0x01 << 1)=2
        GPIO.output(13, val & (0x01 << 2))  #(0x01 << 2)=4
        GPIO.output(15, val & (0x01 << 3))  #(0x01 << 3)=8  
        GPIO.output(16, val & (0x01 << 4))  #(0x01 << 4)=16  
        GPIO.output(18, val & (0x01 << 5))  #(0x01 << 5)=32  
        GPIO.output(22, val & (0x01 << 6))  #(0x01 << 6)=64  
        GPIO.output(7,  val & (0x01 << 7))  #(0x01 << 7)=128
        #avec le code hexa 3f les pins 11,12,13,15,16,18,22,7 seront =11111100
        #ce qui affichera le 0 sur le display 7 segments
        #et ainsi de suite avec les codes hexa 06,5b, jusqu'au code 80.
        #et on recommence le tous à cause de la fonction loop().

def loop():
	while True:
		for dat in dats: #dans la liste dats va chercher les 17 codes hexa
			writeOneByte(dat)  #envoi le code hexa à la fonction writeOneByte
			time.sleep(1.0) #délais de une seconde

def destroy():  #Arrêt du programme
	for pin in pins:
		GPIO.output(pin, GPIO.LOW)
	GPIO.cleanup()             # relache la ressource GPIO

if __name__ == '__main__':     #Le programme commence ici
	setup()                #Lance la fonction setup()
	try:
		loop()             #Lance la fontion loop()
	except KeyboardInterrupt:  # Quand 'Ctrl+C' sont enfoncés, la fonction destroy est exécuté.
		destroy()
