from machine import Pin, ADC
import utime
# Constantes matérielles
LED_PIN = 15 # LED d'état
BUTTON_PIN = 16 # Bouton start/stop
POT_PIN = 26 # Potentiomètre (ADC0)
POT_RESET_THRESHOLD = 65000
# Initialisation matériel
led = Pin(LED_PIN, Pin.OUT)
button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_DOWN)
pot = ADC(POT_PIN)
# Variables de logique
running = False
start_time = 0
elapsed_ms = 0
last_button_state = 0
reset_done = False
def format_time(ms):
total_seconds = ms // 1000
minutes = total_seconds // 60
seconds = total_seconds % 60
millis = ms % 1000
return f"{minutes:02d}:{seconds:02d}:{millis:03d}"
print("=" * 40)
print("Chronometre IoT - Démarrage")
print("Appuyez sur le bouton pour demarrer/arreter")
print("=" * 40)
print()
last_display_time = 0
while True:
now_ms = utime.ticks_ms()
# Gestion bouton start/stop
current_button = button.value()
if current_button == 1 and last_button_state == 0:
if not running:
start_time = utime.ticks_ms()
running = True
print(">> Chronometre DEMARRE <<")
else:
now = utime.ticks_ms()
elapsed_ms += utime.ticks_diff(now, start_time)
running = False
print(f">> Chronometre ARRETE - Temps: {format_time(elapsed_ms)} <<")
utime.sleep_ms(50)
last_button_state = current_button
# Mise à jour du temps
if running:
now = utime.ticks_ms()
current_elapsed = utime.ticks_diff(now, start_time)
display_ms = elapsed_ms + current_elapsed
else:
display_ms = elapsed_ms
# LED d'état
led.value(1 if running else 0)
# Lecture potentiomètre pour reset
pot_value = pot.read_u16()
if pot_value >= POT_RESET_THRESHOLD and not reset_done:
running = False
elapsed_ms = 0
display_ms = 0
reset_done = True
print("\n>>> RESET CHRONOMETRE <<<\n")
utime.sleep_ms(500)
elif pot_value < POT_RESET_THRESHOLD:
reset_done = False
# Affichage console
if utime.ticks_diff(now_ms, last_display_time) >= 200:
status = "[EN COURS]" if running else "[ARRETE]"
print(f"Temps: {format_time(display_ms)} {status} | Potar: {pot_value//1000}%")
last_display_time = now_ms
utime.sleep_ms(10)