from machine import Pin
from time import ticks_ms, sleep
# Entradas
inc = Pin(32, Pin.IN, Pin.PULL_UP)
dec = Pin(33, Pin.IN, Pin.PULL_UP)
start = Pin(34, Pin.IN, Pin.PULL_UP)
# Salidas para el display 1
a1=Pin(25,Pin.OUT) #
b1=Pin(26,Pin.OUT)#
c1=Pin(27,Pin.OUT)#
d1=Pin(14,Pin.OUT) #
e1=Pin(13,Pin.OUT)#
f1=Pin(15,Pin.OUT)#
g1=Pin(4,Pin.OUT)#
# Salidas para el display 2
a2=Pin(23,Pin.OUT)#
b2=Pin(22,Pin.OUT)#
c2=Pin(21,Pin.OUT)#
d2=Pin(19,Pin.OUT)#
e2=Pin(18,Pin.OUT)#
f2=Pin(5,Pin.OUT)#
g2=Pin(17,Pin.OUT)#
# Tabla de segmentos
tabla7seg = (
(0,0,0,0,0,0,1), #0
(1,0,0,1,1,1,1), #1
(0,0,1,0,0,1,0), #2
(0,0,0,0,1,1,0), #3
(1,0,0,1,1,0,0), #4
(0,1,0,0,1,0,0), #5
(0,1,0,0,0,0,0), #6
(0,0,0,1,1,1,1), #7
(0,0,0,0,0,0,0), #8
(0,0,0,0,1,0,0), #9
(1,1,1,1,1,1,1) #Display apagado
)
# Funcion para mostrar en displays
def display7seg(digito1, digito2):
# Primer display
a1.value(tabla7seg[digito1][0])
b1.value(tabla7seg[digito1][1])
c1.value(tabla7seg[digito1][2])
d1.value(tabla7seg[digito1][3])
e1.value(tabla7seg[digito1][4])
f1.value(tabla7seg[digito1][5])
g1.value(tabla7seg[digito1][6])
# Segundo display
a2.value(tabla7seg[digito2][0])
b2.value(tabla7seg[digito2][1])
c2.value(tabla7seg[digito2][2])
d2.value(tabla7seg[digito2][3])
e2.value(tabla7seg[digito2][4])
f2.value(tabla7seg[digito2][5])
g2.value(tabla7seg[digito2][6])
def vizualizar(valor):
if valor <= 9:
display7seg(10, valor)
else:
d1_val = valor // 10
d2_val = valor % 10
display7seg(d1_val, d2_val)
# Cronometro regresivo
def cronometro(valor):
while valor >= 0:
vizualizar(valor)
sleep(1)
valor -= 1
return 1 # al terminar, reinicia el contador en 1
# ---------- PROGRAMA PRINCIPAL ----------
inicio = 1 # siempre arranca en 1
vizualizar(inicio)
while True:
# --------- MODO PROGRAMACIÓN (START en alto) ---------
if start.value() == 1:
if inc.value() == 0:
t0 = ticks_ms()
inicio += 1
if inicio > 99:
inicio = 99
vizualizar(inicio)
sleep(0.1)
# Mantener presionado
if ticks_ms() - t0 >= 1000:
while inc.value() == 0:
inicio += 1
if inicio > 99:
inicio = 99
vizualizar(inicio)
sleep(0.1)
elif dec.value() == 0:
t0 = ticks_ms()
inicio -= 1
if inicio < 1:
inicio = 1
vizualizar(inicio)
sleep(0.1)
# Mantener presionado
if ticks_ms() - t0 >= 1000:
while dec.value() == 0:
inicio -= 1
if inicio < 1:
inicio = 1
vizualizar(inicio)
sleep(0.1)
# --------- MODO CRONÓMETRO (START en bajo) ---------
elif start.value() == 0 and inicio > 1:
inicio = cronometro(inicio) # hace cuenta regresiva
vizualizar(inicio) # muestra reinicio en 1