from machine import Pin, ADC, I2C
from time import sleep_ms, ticks_ms, ticks_diff
import ssd1306
led = Pin("LED", Pin.OUT)
button = Pin(14, Pin.IN, Pin.PULL_UP)
pot = ADC(26)
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
running = False
elapsed_time = 0
start_time = ticks_ms()
reset_done = False
def format_time(ms):
m = ms // 60000
s = (ms % 60000) // 1000
ms_rem = ms % 1000
return "{:02}:{:02}:{:03}".format(m, s, ms_rem)
while True:
# Bouton appuye -> changer l'etat
if button.value() == 0:
sleep_ms(200)
if running:
elapsed_time += ticks_diff(ticks_ms(), start_time)
running = False
else:
start_time = ticks_ms()
running = True
# attendre que le bouton soit relache
while button.value() == 0:
sleep_ms(10)
# LED
if running:
led.on()
else:
led.off()
# Potentiometre
pot_value = pot.read_u16()
if pot_value >= 65000 and not reset_done:
elapsed_time = 0
if running:
start_time = ticks_ms()
reset_done = True
if pot_value < 64000:
reset_done = False
# Temps
if running:
current_time = elapsed_time + ticks_diff(ticks_ms(), start_time)
status = "RUN"
else:
current_time = elapsed_time
status = "STOP"
# OLED
oled.fill(0)
oled.text("CHRONO", 0, 0)
oled.text(format_time(current_time), 0, 20)
oled.text(status, 0, 40)
oled.show()
sleep_ms(50)