from machine import Pin, PWM
import time
import random
# LEDs (pinos 0 a 4)
led_pins = {
1: Pin(0, Pin.OUT),
2: Pin(1, Pin.OUT),
3: Pin(2, Pin.OUT),
4: Pin(3, Pin.OUT),
5: Pin(4, Pin.OUT)
}
# Segmentos do display 7 segmentos
A = Pin(28, Pin.OUT)
B = Pin(27, Pin.OUT)
C = Pin(26, Pin.OUT)
D = Pin(22, Pin.OUT)
E = Pin(21, Pin.OUT)
F = Pin(20, Pin.OUT)
G = Pin(19, Pin.OUT)
# Botão no pino 6
botao = Pin(6, Pin.IN, Pin.PULL_DOWN)
# Buzzer no pino 16
buzzer = PWM(Pin(16))
# --- Funções ---
def apagar_leds():
for led in led_pins.values():
led.off()
def apagar_display():
A.value(1)
B.value(1)
C.value(1)
D.value(1)
E.value(1)
F.value(1)
G.value(1)
numeros = {
1: [B, C],
2: [A, B, G, E, D],
3: [A, B, C, D, G],
4: [B, C, F, G],
5: [A, C, D, F, G],
0: [A, B, C, D, E, F]
}
def display_number(num):
apagar_display()
if num in numeros:
for segmento in numeros[num]:
segmento.value(0)
def som_acerto():
buzzer.freq(1000)
for _ in range(3):
buzzer.duty_u16(5000)
time.sleep(0.1)
buzzer.duty_u16(0)
time.sleep(0.05)
def som_erro():
buzzer.freq(300)
buzzer.duty_u16(5000)
time.sleep(0.5)
buzzer.duty_u16(0)
def som_game_over():
for freq in [200, 150, 100]:
buzzer.freq(freq)
buzzer.duty_u16(4000)
time.sleep(0.4)
buzzer.duty_u16(0)
time.sleep(0.1)
def piscar_led(numero_led, vezes=5, intervalo=0.2):
for _ in range(vezes):
led_pins[numero_led].on()
time.sleep(intervalo)
led_pins[numero_led].off()
time.sleep(intervalo)
def piscar_todos_leds(vezes=3, intervalo=0.2):
for _ in range(vezes):
for led in led_pins.values():
led.on()
time.sleep(intervalo)
for led in led_pins.values():
led.off()
time.sleep(intervalo)
def esperar_botao():
while botao.value() == 0:
time.sleep(0.01)
time.sleep(0.2)
# --- Loop principal do jogo ---
while True:
vidas = 5
print("Aperte o botão para iniciar o jogo...")
esperar_botao()
print("Jogo iniciado!")
display_number(vidas)
while vidas > 0:
apagar_leds()
display_number(vidas)
print(f"Vidas restantes: {vidas}")
print("Aguardando botão para sortear número...")
esperar_botao()
numero_sorteado = random.randint(1, 5)
print("Número sorteado. Tente adivinhar!")
try:
tentativa = int(input("Digite seu palpite (1 a 5): "))
if 1 <= tentativa <= 5:
if tentativa == numero_sorteado:
print("✅ Acertou!")
piscar_led(tentativa)
som_acerto()
display_number(tentativa)
time.sleep(1)
continuar = input("Deseja jogar novamente? (s/n): ").strip().lower()
if continuar != 's':
print("Jogo encerrado.")
apagar_leds()
apagar_display()
buzzer.deinit()
exit()
else:
break # reinicia do zero
else:
print(f"❌ Errou! O número era {numero_sorteado}")
piscar_todos_leds()
som_erro()
vidas -= 1
display_number(vidas)
time.sleep(2)
else:
print("Número fora do intervalo.")
except ValueError:
print("Entrada inválida.")
if vidas == 0:
print("💀 Game Over! Suas vidas acabaram.")
display_number(0)
som_game_over()
time.sleep(2)
jogar_novamente = input("Deseja tentar novamente? (s/n): ").strip().lower()
if jogar_novamente != 's':
print("Jogo encerrado.")
apagar_leds()
apagar_display()
buzzer.deinit()
break
VIDAS