from machine import Pin, Timer
import time as t
temporizador = Timer()
MasUno = Pin(16, Pin.IN, Pin.PULL_DOWN)
MasDiez = Pin(17, Pin.IN, Pin.PULL_DOWN)
INICIO = Pin(18, Pin.IN, Pin.PULL_DOWN)
PAUSA = Pin(19, Pin.IN, Pin.PULL_DOWN)
RST = Pin(20, Pin.IN, Pin.PULL_DOWN)
Salida = Pin(22, Pin.OUT)
leds = [Pin(i, Pin.OUT) for i in (0, 1, 2, 3, 4, 5, 6)]
habs = [Pin(i, Pin.OUT) for i in (15, 14, 13, 12)]
digitos = {
0: [1, 1, 1, 1, 1, 1, 0],
1: [0, 1, 1, 0, 0, 0, 0],
2: [1, 1, 0, 1, 1, 0, 1],
3: [1, 1, 1, 1, 0, 0, 1],
4: [0, 1, 1, 0, 0, 1, 1],
5: [1, 0, 1, 1, 0, 1, 1],
6: [1, 0, 1, 1, 1, 1, 1],
7: [1, 1, 1, 0, 0, 0, 0],
8: [1, 1, 1, 1, 1, 1, 1],
9: [1, 1, 1, 1, 0, 1, 1]
}
habilitadores = {
0: [0, 1, 1, 1],
1: [1, 0, 1, 1],
2: [1, 1, 0, 1],
3: [1, 1, 1, 0],
4: [1, 1, 1, 1] # Apagar los displays
}
def mostrar(numero):
for pin, estado in zip(leds, digitos[numero]):
pin.value(estado)
def habilitar(numero):
for pin, estado in zip(habs, habilitadores[numero]):
pin.value(estado)
segundos = 0
minutos = 0
retardo = 300 # milisegundos
u_pres = {
"1": 0,
"10": 0,
"INICIO": 0,
"PAUSA": 0,
"RST": 0,
}
estado = {"activo" : False}
def mostrar_numeros():
unidad = segundos % 10
decena = (segundos // 10) % 10
centena = minutos % 10
millar = (minutos // 10) % 10
habilitar(4)
mostrar(unidad)
habilitar(0)
t.sleep_ms(5)
habilitar(4)
mostrar(decena)
habilitar(1)
t.sleep_ms(5)
habilitar(4)
mostrar(centena)
habilitar(2)
t.sleep_ms(5)
habilitar(4)
mostrar(millar)
habilitar(3)
t.sleep_ms(5)
def tempo(temporizador):
global segundos, minutos
if minutos == 0 and segundos == 0:
temporizador.deinit()
Salida.value(0)
return
segundos -= 1
if segundos < 0:
segundos = 59
minutos -= 1
def fun_Uno(MasUno):
global segundos, minutos
t_actual = t.ticks_ms()
if t.ticks_diff(t_actual, u_pres["1"]) > retardo and not estado["activo"]:
segundos = segundos + 1
if segundos > 59:
segundos = 0
minutos = minutos + 1
if minutos > 99:
minutos = 0
u_pres["1"] = t_actual
def fun_Diez(MasDiez):
global segundos, minutos
t_actual = t.ticks_ms()
if t.ticks_diff(t_actual, u_pres["10"]) > retardo and not estado["activo"]:
segundos = segundos + 10
if segundos > 59:
segundos = segundos % 60
minutos = minutos + 1
if minutos > 99:
minutos = 0
u_pres["10"] = t_actual
def fun_Inicio(INICIO):
t_actual = t.ticks_ms()
if t.ticks_diff(t_actual, u_pres["INICIO"]) > retardo and not estado["activo"]:
Salida.value(1)
estado["activo"] = True
temporizador.init(period=1000, mode=Timer.PERIODIC, callback=tempo)
u_pres["INICIO"] = t_actual
def fun_Pausa(PAUSA):
t_actual = t.ticks_ms()
if t.ticks_diff(t_actual, u_pres["PAUSA"]) > retardo and estado["activo"]:
Salida.value(0)
estado["activo"] = False
temporizador.deinit()
u_pres["PAUSA"] = t_actual
def fun_Rst(RST):
global segundos, minutos
t_actual = t.ticks_ms()
if t.ticks_diff(t_actual, u_pres["RST"]) > retardo and not estado["activo"]:
segundos = 0
minutos = 0
u_pres["RST"] = t_actual
MasUno.irq(trigger = Pin.IRQ_RISING, handler=fun_Uno)
MasDiez.irq(trigger = Pin.IRQ_RISING, handler=fun_Diez)
INICIO.irq(trigger = Pin.IRQ_RISING, handler=fun_Inicio)
PAUSA.irq(trigger = Pin.IRQ_RISING, handler=fun_Pausa)
RST.irq(trigger = Pin.IRQ_RISING, handler=fun_Rst)
while True:
mostrar_numeros()