1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| #!/usr/bin/python
# -*- coding: latin-1 -*-
#import des modules nécessaires
import RPi.GPIO as GPIO
import time
import random
import pygame
from threading import Thread
#ignorer les avertissements liés aux GPIOs
GPIO.setwarnings(False)
#nommage GPIO en BCM
GPIO.setmode(GPIO.BCM)
#importer les méthodes de la procédure du module pour les SR
from shiftpi.shiftpi import HIGH, LOW, ALL, digitalWrite, shiftRegisters, delay, pinsSetup
#indiquer que l'on travaille avec 8 shift registers
shiftRegisters(8)
#mettre toutes les sorties du SR à zéro
digitalWrite(ALL, LOW)
#6 lignes à retirer quand les LED RGB seront placées par des cathode communes.
digitalWrite(51, HIGH)
digitalWrite(52, HIGH)
digitalWrite(53, HIGH)
digitalWrite(54, HIGH)
digitalWrite(55, HIGH)
digitalWrite(56, HIGH)
##############
##############
#importer le module pour la gestion du mcp13017 (ajout GPIOs en entré/sortie)
import Adafruit_GPIO.MCP230xx as MCP
#définir la variable 'mcp' avec les paramètres et adresse en 000
mcp1 = MCP.MCP23017(address = 0x21, busnum = 1)
#définir les 10 entrées pour les 10 boutons à l'état haut avec résistance de pull up
#Interrupteur 0
mcp1.pullup(0, 1)
mcp1.pullup(1, 1)
mcp1.pullup(2, 1)
mcp1.pullup(3, 1)
mcp1.pullup(4, 1)
mcp1.pullup(5, 1)
mcp1.pullup(6, 1)
mcp1.setup(0, GPIO.IN)
mcp1.setup(1, GPIO.IN)
mcp1.setup(2, GPIO.IN)
mcp1.setup(3, GPIO.IN)
mcp1.setup(4, GPIO.IN)
mcp1.setup(5, GPIO.IN)
mcp1.setup(6, GPIO.IN)
correspondance = {}
correspondance["rouge"] = 0
correspondance["jaune"] = 1
correspondance["bleu"] = 2
correspondance["vert"] = 3
correspondance["blanc"] = 4
correspondance["noir"] = 5
liste_couleurs = ["rouge","jaune","bleu","vert","blanc","noir"]
melange_couleurs = random.sample(liste_couleurs,6)
######
run = True
def sequence():
global run
while run:
print("jouer les sons")
#Jouer les son dans l'ordre défini et en boucle
for j in range(0, 5):
pygame.mixer.music.load(melange_couleurs[j] + ".mp3")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
continue
time.sleep(2)
if __name__ == "__main__":
sonne = True
#tant que le téléphone n'est pas décroché, faire sonner.
while sonne :
pygame.mixer.init()
pygame.mixer.music.load("sonne.mp3")
pygame.mixer.music.play()
if mcp1.input(6) == False :
sonne = False
time.sleep (0.02)
#Penser à ajouter les transistors pour stopper le son des L et R
#Lancer le thread indiquant la sequence vocale.
Thread(target=sequence).start()
try:
i = 0
while i < 6:
print(melange_couleurs)
#Si le bouton appuyé est de la bone couleur, passer au suivant
if mcp1.input(correspondance[melange_couleurs[i]]) == False :
i += 1
time.sleep(0.5)
#Sinon tout recommencer
elif mcp1.input(0) == False or mcp1.input(1) == False or mcp1.input(2) == False or mcp1.input(3) == False or mcp1.input(4) == False or mcp1.input(5) == False:
i = 0
time.sleep(0.5)
time.sleep(0.02)
print("gagné")
run = False
#Prise en compte d'une sortie de script par appui sur Ctrl+C
except KeyboardInterrupt:
print("Programme interrompu par Ctrl+C !")
#Reinitialisation des ports GPIO, quelque soit la facon dont se termine le script
finally:
GPIO.cleanup() |
Partager