from machine import Pin, PWM
from utime import sleep_ms
from urandom import randint
red_led_pin = 12
red_button_pin = 27
red_tone = 220
green_led_pin = 14
green_button_pin = 13
green_tone = 262
blue_led_pin = 16
blue_button_pin = 17
blue_tone = 330
yellow_led_pin = 2
yellow_button_pin = 4
yellow_tone = 392
buzzer_pin = 19
leds = [Pin(red_led_pin, Pin.OUT), Pin(green_led_pin, Pin.OUT), Pin(blue_led_pin, Pin.OUT), Pin(yellow_led_pin, Pin.OUT)]
buttons = [Pin(red_button_pin, Pin.IN), Pin(green_button_pin, Pin.IN), Pin(blue_button_pin, Pin.IN), Pin(yellow_button_pin, Pin.IN)]
sounds = [red_tone, green_tone, blue_tone, yellow_tone]
colors = ['red', 'green', 'blue', 'yellow']
def tone(pin, freq, time):
buzzer = PWM(Pin(pin), freq=freq, duty=512)
sleep_ms(time)
buzzer.deinit()
game_max_sequence = 50
game_status = 0
def check_buttons(buttons):
while True:
for i in range(len(buttons)):
if buttons[i].value():
return i
sleep_ms(1)
def loose_melody(tempo):
tone(buzzer_pin, 98, tempo)
tone(buzzer_pin, 93, tempo)
tone(buzzer_pin, 87, tempo)
def win_melody(tempo):
tone(buzzer_pin, 330, tempo)
tone(buzzer_pin, 392, tempo)
tone(buzzer_pin, 659, tempo)
tone(buzzer_pin, 523, tempo)
tone(buzzer_pin, 587, tempo)
tone(buzzer_pin, 784, tempo)
while True:
if game_status == 0:
game_speed = 200
game_step = 0
read_step = 0
game_sequence = [randint(0,3) for _ in range(game_max_sequence)]
# game_sequence = []
# for i in range(game_max_sequence):
# game_sequence.append(randint(0,3))
game_status = 1
elif game_status == 1:
print('Colors: ', end='')
for i in range(0, game_step+1):
target = game_sequence[i]
print(colors[target], end=' ')
sleep_ms(game_speed*2)
leds[target].on()
tone(buzzer_pin, sounds[target], game_speed)
sleep_ms(game_speed)
leds[target].off()
print()
game_status = 2
elif game_status == 2:
press = check_buttons(buttons)
if press == game_sequence[read_step]:
print(f'Correct {colors[press]}')
leds[press].on()
tone(buzzer_pin, sounds[press], 200)
leds[press].off()
sleep_ms(game_speed)
if game_speed > 50:
game_speed -= 10
if read_step == game_step:
print('Next step.')
sleep_ms(game_speed)
win_melody(150)
sleep_ms(game_speed)
read_step = 0
game_step += 1
game_status = 1
else:
read_step += 1
else:
game_status = 3
print(game_step)
print('You Loose!')
elif game_status == 3:
for _ in range(3):
loose_melody(250)
sleep_ms(game_speed)
game_status = 0