import machine, time, _thread
from machine import Timer
from machine import Pin, I2C
from i2c_lcd import lcd

i2c = I2C(0, scl = Pin(9), sda = Pin(8), freq = 400000)

display = lcd(i2c)

#led interne du raspberry pico
pico_led = machine.Pin(25, machine.Pin.OUT) 

# Objet compte à rebours
class CptRebours():
    #constructeur, initialise timeleft
    def __init__(self, t=0):
        self.timeleft = t
    # fct callbackappelée par le timer
    def countdown(self, tm):    
        if self.timeleft > 0 :
            self.timeleft -= 1
        
# Fonction exécutée dans le second thread 
# gère le clignotement de la led
def thread_anim():
    while True:
        if (cptr.timeleft>0):
            # fait clignoter la led interne
            pico_led.toggle()
            display.home()
            display.write("Temp = ")
            # attente supplémentaire s'il reste plus de 5s
            if cptr.timeleft>5:  
                time.sleep(0.18)                
        else:
            # extinction de la led interne
            pico_led.value(0)
        # temps d'attente clignotement
        time.sleep(0.18)

#initialisation d'un compte à rebours
cptr = CptRebours() 

#démarrage du thread d'animation
_thread.start_new_thread(thread_anim, ()) 

#boucle du thread principal
while True:
    cptr = CptRebours(int(input("Compte à rebours en secondes: ")))
    print('Démarrage compte à rebours ...')
    tim = Timer(period=1000, callback=cptr.countdown)
    
    while (cptr.timeleft > 0 ):
        print('temps restant:', cptr.timeleft, ' secondes')
        time.sleep(1)
    
    print("BIP BIP BIP compte à rebours terminé !")
    tim.deinit() #stoppe et libère le timer