from machine import Pin, PWM
import time
import random
# --- konfiguracja pinów ---
signal_led = Pin(15, Pin.OUT)
button = Pin(14, Pin.IN, Pin.PULL_UP)
buzzer = PWM(Pin(12))
buzzer.duty_u16(0)
ATTEMPTS = 5
results = []
# --- funkcje pomocnicze ---
def beep(freq=1000, duration_ms=150):
buzzer.freq(freq)
buzzer.duty_u16(20000)
time.sleep_ms(duration_ms)
buzzer.duty_u16(0)
def wait_for_press_and_release():
while button.value() == 1:
time.sleep_ms(1)
time.sleep_ms(20) # debounce
while button.value() == 0:
time.sleep_ms(1)
time.sleep_ms(20)
def classify(avg):
if avg < 200:
return "EXCELLENT"
elif avg < 300:
return "GOOD"
elif avg < 400:
return "AVERAGE"
else:
return "SLOW"
def signal_performance(avg):
if avg < 200:
for _ in range(5): # szybkie mruganie
signal_led.on()
time.sleep_ms(100)
signal_led.off()
time.sleep_ms(100)
elif avg < 300:
signal_led.on()
time.sleep_ms(700)
signal_led.off()
elif avg < 400:
for _ in range(3): # wolne mruganie
signal_led.on()
time.sleep_ms(350)
signal_led.off()
time.sleep_ms(250)
else:
beep(350, 900)
# --- pojedynczy test ---
def run_single_test(test_no):
print()
print("TEST", test_no)
print("Press button to start...")
wait_for_press_and_release()
print("WAIT FOR SIGNAL...")
delay_ms = random.randint(2000, 5000)
start_wait = time.ticks_ms()
false_start = False
while time.ticks_diff(time.ticks_ms(), start_wait) < delay_ms:
if button.value() == 0:
false_start = True
break
time.sleep_ms(1)
if false_start:
print("FALSE START!")
beep(300, 500)
while button.value() == 0:
time.sleep_ms(1)
return None
signal_led.on()
start = time.ticks_ms()
while button.value() == 1:
time.sleep_ms(1)
reaction = time.ticks_diff(time.ticks_ms(), start)
signal_led.off()
print("Reaction time:", reaction, "ms")
beep(1200, 80)
while button.value() == 0:
time.sleep_ms(1)
return reaction
# --- podsumowanie ---
def print_summary(results):
valid = [r for r in results if r is not None]
print()
print("=== RESULTS ===")
for i, r in enumerate(results, start=1):
if r is None:
print("Test", i, ": FALSE START")
else:
print("Test", i, ":", r, "ms")
if not valid:
print("No valid attempts")
print("Performance: N/A")
beep(250, 1000)
return
avg = sum(valid) / len(valid)
fastest = min(valid)
slowest = max(valid)
performance = classify(avg)
print("Average:", round(avg, 1), "ms")
print("Fastest:", fastest, "ms")
print("Slowest:", slowest, "ms")
print("Performance:", performance)
signal_performance(avg)
# --- główna pętla ---
while True:
results = []
for i in range(1, ATTEMPTS + 1):
results.append(run_single_test(i))
time.sleep(1)
print_summary(results)
print()
print("New game in 5 seconds...")
time.sleep(5)