import machine
import utime
import random
# Configuration des broches pour l'afficheur 7 segments
# Index : 0 1 2 3 4 5 6
# Segment : A B C D E F G
segments = [
machine.Pin(21, machine.Pin.OUT), # A
machine.Pin(22, machine.Pin.OUT), # B
machine.Pin(16, machine.Pin.OUT), # C
machine.Pin(17, machine.Pin.OUT), # D
machine.Pin(18, machine.Pin.OUT), # E
machine.Pin(19, machine.Pin.OUT), # F
machine.Pin(20, machine.Pin.OUT) # G
]
bouton = machine.Pin(10, machine.Pin.IN, machine.Pin.PULL_UP)
pot = machine.ADC(28)
chiffres = {
1: [0,1,1,0,0,0,0],
2: [1,1,0,1,1,0,1],
3: [1,1,1,1,0,0,1],
4: [0,1,1,0,0,1,1],
5: [1,0,1,1,0,1,1],
6: [1,0,1,1,1,1,1]
}
# Fonction pour afficher un chiffre
def afficher(valeur):
pattern = chiffres[valeur]
for i in range(7):
segments[i].value(pattern[i])
# Animation d'extinction progressive
def anim_extinction():
print("Extinction en cours...")
# Ordre d'extinction pour faire un effet de rotation : A, B, C, D, E, F, puis G
# Index correspondants : 0, 1, 2, 3, 4, 5, 6
ordre_extinction = [0, 1, 2, 3, 4, 5, 6]
for index in ordre_extinction:
segments[index].value(0) # Éteint le segment
utime.sleep(0.08) # Pause de 80ms entre chaque segment pour l'effet visuel
def obtenir_vitesse():
lecture = pot.read_u16()
return 0.05 + (lecture / 65535) * 0.35
print("Pret ! Appuyez sur le bouton.")
# Variables pour la gestion de l'extinction automatique
TEMPS_AFFICHAGE = 3000 # 3 secondes avant extinction
dernier_changement = utime.ticks_ms()
est_allume = False
while True:
if bouton.value() == 0:
print("Lancement...")
nb_tours = random.randint(5, 15)
for i in range(nb_tours):
afficher(random.randint(1, 6))
utime.sleep(obtenir_vitesse())
resultat = random.randint(1, 6)
afficher(resultat)
print("Resultat :", resultat)
# On réinitialise le minuteur
dernier_changement = utime.ticks_ms()
est_allume = True
utime.sleep(0.5)
while bouton.value() == 0:
utime.sleep(0.05)
# Vérification du temps écoulé pour l'extinction
if est_allume and utime.ticks_diff(utime.ticks_ms(), dernier_changement) > TEMPS_AFFICHAGE:
anim_extinction()
est_allume = False # L'écran est maintenant complètement éteint
utime.sleep(0.01)