from pico_i2c_lcd import I2cLcd
from machine import I2C, Pin, PWM
from time import sleep
import utime
I2C_ADDR = 0x27
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
button = Pin(18, Pin.IN, Pin.PULL_DOWN)
led_pins = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
led_pwm = [PWM(Pin(pin), freq=1000) for pin in led_pins]
def bad_reaction():
for pwm in led_pwm:
pwm.duty_u16(0)
sleep(0.1)
pwm.duty_u16(32768)
sleep(0.1)
pwm.duty_u16(0)
sleep(0.1)
def good_reaction():
for pwm in led_pwm:
pwm.duty_u16(32768)
sleep(0.1)
lcd.move_to(1, 0)
lcd.putstr('3')
sleep(1)
lcd.move_to(5, 0)
lcd.putstr('2')
sleep(1)
lcd.move_to(9, 0)
lcd.putstr('1')
sleep(0.5)
lcd.clear()
sleep(0.5)
lcd.move_to(0, 0)
lcd.putstr('TAP')
start_time = utime.ticks_ms()
while True:
if button.value():
elapsed_time = utime.ticks_ms() - start_time
lcd.clear()
lcd.putstr("Time: {} ms".format(elapsed_time))
if elapsed_time < 200:
good_reaction()
else:
bad_reaction()
sleep(2)
break