from machine import Pin, PWM #Importa as classes ADC e Pin da biblioteca machine
from time import sleep_ms #Importa a função sleep_ms da biblioteca time
import random #Importa random para gerar valores aleatórios
#ENTRADAS (Botões)
butRed = Pin(19, Pin.IN) #Atribui o pino GP19 a variável butRed - botão vermelho
butYel = Pin(20, Pin.IN) #Atribui o pino GP20 a variável butYel - botão amarelo
butGre = Pin(21, Pin.IN) #Atribui o pino GP21 a variável butGre - botão verde
#SAÍDAS
#LEDS
ledRed = Pin(10, Pin.OUT) #Atribui o pino GP10 a variável ledRed - LED vermelho
ledYel = Pin(9, Pin.OUT) #Atribui o pino GP19 a variável ledYel - LED amarelo
ledGre = Pin(8, Pin.OUT) #Atribui o pino GP8 a variável ledGre - LED verde
#Display 7 segmentos
a = Pin(17, Pin.OUT) #Define a como saída, no pino GP17
b = Pin(16, Pin.OUT) #Define b como saída, no pino GP16
c = Pin(15, Pin.OUT) #Define c como saída, no pino GP15
d = Pin(14, Pin.OUT) #Define d como saída, no pino GP14
e = Pin(13, Pin.OUT) #Define e como saída, no pino GP13
f = Pin(12, Pin.OUT) #Define f como saída, no pino GP12
g = Pin(11, Pin.OUT) #Define g como saída, no pino GP11
#Buzzer
buzzer = PWM(Pin(18)) #Define a variável buzzer ao pino GP18, controlado pelo PWM
#OUTRAS VARIÁVEIS
#Tons do buzzer quando para os botões
tomRed = 294 #Tom para o LED vermelho
tomYel = 330 #Tom para o LED amarelo
tomGre = 350 #Tom para o LED verde
#Variáveis para o jogo
led = 0 #Variável que armazenará o valor randômico que representará o LED que estará ligado
temp_led_ligado = 600 #Tempo em que o LED deve estar ligado
temp_led_desligado = 100 #Tempo em que o LED deve estar desligado
mat = {} #Vetor de 10 posições que armazenará a sequência
posi_mat = 0 #Posição do vetor
intensidade = 1000 #Intensidade do som do buzzer
#Definindo funções:
#Funções para escrever os números no display
def zero():
a.value(1)
b.value(1)
c.value(1)
d.value(1)
e.value(1)
f.value(1)
g.value(0)
def um():
a.value(0)
b.value(1)
c.value(1)
d.value(0)
e.value(0)
f.value(0)
g.value(0)
def dois():
a.value(1)
b.value(1)
c.value(0)
d.value(1)
e.value(1)
f.value(0)
g.value(1)
def tres():
a.value(1)
b.value(1)
c.value(1)
d.value(1)
e.value(0)
f.value(0)
g.value(1)
def quatro():
a.value(0)
b.value(1)
c.value(1)
d.value(0)
e.value(0)
f.value(1)
g.value(1)
def cinco():
a.value(1)
b.value(0)
c.value(1)
d.value(1)
e.value(0)
f.value(1)
g.value(1)
def seis():
a.value(1)
b.value(0)
c.value(1)
d.value(1)
e.value(1)
f.value(1)
g.value(1)
def sete():
a.value(1)
b.value(1)
c.value(1)
d.value(0)
e.value(0)
f.value(0)
g.value(0)
def oito():
a.value(1)
b.value(1)
c.value(1)
d.value(1)
e.value(1)
f.value(1)
g.value(1)
def nove():
a.value(1)
b.value(1)
c.value(1)
d.value(1)
e.value(0)
f.value(1)
g.value(1)
#Função para iniciar o jogo
def inicio():
for i in range(2):
buzzer.init(330, duty_u16=intensidade) #Frequência e duração da nota Mi
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledRed.value(1) #Liga o LED vermelho
sleep_ms(100) #Intervalo de 100 milissegundos
buzzer.init(330, duty_u16=intensidade) #Frequência e duração da nota Mi
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledYel.value(1) #Liga o LED amarelo
sleep_ms(100) #Intervalo de 100 milissegundos
buzzer.init(330, duty_u16=intensidade) #Frequência e duração da nota Mi
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledGre.value(1) #Liga o LED verde
sleep_ms(100) #Intervalo de 100 milissegundos
buzzer.init(262, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
sleep_ms(100) #Intervalo de 100 milissegundos
ledRed.value(0) #Desliga o LED vermelho
ledYel.value(0) #Desliga o LED amarelo
ledGre.value(0) #Desliga o LED Verde
sleep_ms(500) #Intervalo de 500 milissegundos
#Função para quando o jogador perder
def perdeu():
for i in range(3): #Repetir 3 vezes
for i in range(3): #Repetir 3 vezez
buzzer.init(262, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledRed.value(1) #Liga o LED vermelho
ledYel.value(1) #Liga o LED amarelo
ledGre.value(1) #Liga o LED verde
sleep_ms(250) #Intervalo de 250 milissegundos
ledRed.value(0) #Desliga o LED vermelho
ledYel.value(0) #Desliga o LED amarelo
ledGre.value(0) #Desliga o LED verde
buzzer.init(528, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
sleep_ms(100) #Intervalo de 100 milissegundos
#Função para quando o jogador ganhar
def ganhou():
for i in range(2): #Repetir 2 vezes
buzzer.init(440, duty_u16=intensidade) #Frequência e duração da nota Lá
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledRed.value(1) #Liga o LED vermelho
ledYel.value(1) #Liga o LED amarelo
ledGre.value(1) #Liga o LED verde
sleep_ms(250) #Intervalo de 250 milissegundos
ledRed.value(0) #Desliga o LED vermelho
ledYel.value(0) #Desliga o LED amarelo
ledGre.value(0) #Desliga o LED verde
buzzer.init(495, duty_u16=intensidade) #Frequência e duração da nota Si
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledRed.value(1) #Liga o LED vermelho
ledYel.value(1) #Liga o LED amarelo
ledGre.value(1) #Liga o LED verde
sleep_ms(250) #Intervalo de 250 milissegundos
ledRed.value(0) #Desliga o LED vermelho
ledYel.value(0) #Desliga o LED amarelo
ledGre.value(0) #Desliga o LED verde
buzzer.init(528, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledRed.value(1) #Liga o LED vermelho
ledYel.value(1) #Liga o LED amarelo
ledGre.value(1) #Liga o LED verde
sleep_ms(250) #Intervalo de 250 milissegundos
ledRed.value(0) #Desliga o LED vermelho
ledYel.value(0) #Desliga o LED amarelo
ledGre.value(0) #Desliga o LED verde
buzzer.init(528, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
ledRed.value(1) #Liga o LED vermelho
ledYel.value(1) #Liga o LED amarelo
ledGre.value(1) #Liga o LED verde
sleep_ms(250) #Intervalo de 250 milissegundos
ledRed.value(0) #Desliga o LED vermelho
ledYel.value(0) #Desliga o LED amarelo
ledGre.value(0) #Desliga o LED verde
inicio() #Chama a função inicio
while True: #Loop infinito
led = random.randint(0,2) #Gera um valor aleatório entre 0 e 2
mat[posi_mat] = led #Guarda o valor gerado no vetor
#Liga o display conforme posição do vetor (nível do jogo)
if posi_mat == 0:
zero()
elif posi_mat == 1:
um()
elif posi_mat == 2:
dois()
elif posi_mat == 3:
tres()
elif posi_mat == 4:
quatro()
elif posi_mat == 5:
cinco()
elif posi_mat == 6:
seis()
elif posi_mat == 7:
sete()
elif posi_mat == 8:
oito()
elif posi_mat == 9:
nove()
i = 0
while i <= posi_mat: #Mostra a sequência dos LEDs sempre que passar o nível
#Liga o LED correspondente ao valor que está no vetor na posição i
if mat[i] == 0:
ledGre.value(1) #Liga o LED verde
buzzer.init(tomGre, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
sleep_ms(temp_led_ligado) #Intervalo definido pela variavel temp_led_ligado
ledGre.value(0) #Desiga o LED verde
sleep_ms(temp_led_desligado) #Intervalo definido pela variavel temp_led_desligado
elif mat[i] == 1:
ledYel.value(1) #Liga o LED amarelo
buzzer.init(tomYel, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
sleep_ms(temp_led_ligado) #Intervalo definido pela variavel temp_led_ligado
ledYel.value(0) #Desliga o LED amarelo
sleep_ms(temp_led_desligado) #Intervalo definido pela variavel temp_led_desligado
elif mat[i] == 2:
ledRed.value(1) #Liga o LED vermelho
buzzer.init(tomRed, duty_u16=intensidade) #Frequência e duração da nota Dó
sleep_ms(200) #Intervalo de 200 milissegundos
buzzer.deinit() #Desliga o buzzer
sleep_ms(temp_led_ligado) #Intervalo definido pela variavel temp_led_ligado
ledRed.value(0) #Desliga o LED vermelho
sleep_ms(temp_led_desligado) #Intervalo definido pela variavel temp_led_desligado
else:
break
i = i + 1
temp = 0 #Variável temporária utilizada para aguardar o jogador digitar a sequência fornecida pelo jogo
while temp <= posi_mat:
if butGre.value() == 1: #Se butGre for nível alto - botão verde pressionado
ledGre.value(1) #Liga o LED verde
buzzer.init(tomGre, duty_u16=intensidade) #Frequência para o led verde
sleep_ms(100) #Intervalo de 100 milissegundos
buzzer.deinit() #Desliga o buzzer
while butGre.value() == 1: #Se butGre continuar nível alto - botão verde pressionado
None #Não faça nada
ledGre.value(0) #Desliga o LED verde
sleep_ms(200) #Intervalo de 200 milissegundos
#Da continuidade ao jogo
if mat[temp] == 0:
temp = temp + 1
else:
print("Erro!!!!")
posi_mat = 11
break
if butYel.value() == 1: #Se butYel for nível alto - botão amarelo pressionado
ledYel.value(1) #Liga o LED amarelo
buzzer.init(tomYel, duty_u16=intensidade) #Frequência para o led amarelo
sleep_ms(100) #Intervalo de 100 milissegundos
buzzer.deinit() #Desliga o buzzer
while butYel.value() == 1: #Se butYel continuar nível alto - botão amarelo pressionado
None #Não faça nada
ledYel.value(0) #Desliga o LED amarelo
sleep_ms(200) #Intervalo de 200 milissegundos
#Da continuidade ao jogo
if mat[temp] == 1:
temp = temp + 1
else:
print("Erro!!!!")
posi_mat = 11
break
if butRed.value() == 1: #Se butRed for nível alto - botão vermelho pressionado
ledRed.value(1) #Liga o LED vermelho
buzzer.init(tomRed, duty_u16=intensidade) #Frequência para o led vermelho
sleep_ms(100) #Intervalo de 100 milissegundos
buzzer.deinit() #Desliga o buzzer
while butRed.value() == 1: #Se butRed continuar nível alto - botão vermelho pressionado
None
ledRed.value(0)
sleep_ms(200)
if mat[temp] == 2:
temp = temp + 1
else:
print("Erro!!!!")
posi_mat = 11
break
posi_mat = posi_mat + 1
if posi_mat == 10: #Se a posi_mat for igual a 10
ganhou() #Chama a função ganhou()
print("Parabéns, você venceu!! \nINICIO DE JOGO")
posi_mat = 0 #Atribui 0 a variável posi_mat para reiniciar o jogo
sleep_ms(3000) #Intervalo de 3000 milissegundos (3 segundos)
if posi_mat >= 11: #Se a posi_mat for maior ou igual a 11
print("---- >>> FIM DE JOGO <<< ----")
perdeu() #Chama a função perdeu()
posi_mat = 0 #Atribui 0 a variável posi_mat para reiniciar o jogo
print("INICIO DE JOGO")
sleep_ms(3000) #Intervalo de 3000 milissegundos (3 segundos)