from machine import Pin
import time
from time import sleep_ms
# Controles de los 7 segmentos
seg_a = Pin(0, Pin.OUT)
seg_b = Pin(1, Pin.OUT)
seg_c = Pin(2, Pin.OUT)
seg_d = Pin(3, Pin.OUT)
seg_e = Pin(4, Pin.OUT)
seg_f = Pin(5, Pin.OUT)
seg_g = Pin(6, Pin.OUT)
# Controles de los 4 dígitos
dig_1 = Pin(12, Pin.OUT)
dig_2 = Pin(13, Pin.OUT)
dig_3 = Pin(14, Pin.OUT)
dig_4 = Pin(15, Pin.OUT)
# Variable para el contador
conta = 0
# Interrupción para incrementar el contador
# Importa la función sleep de time
from time import sleep_ms
# Define una constante para el debounce
DEBOUNCE_TIME_MS = 50 # Puedes ajustar este valor según sea necesario
# Interrupción para incrementar el contador con debounce
def inc_conta(pin):
global conta
# Añade un pequeño retraso para el debounce
sleep_ms(DEBOUNCE_TIME_MS)
# Verifica si el botón sigue presionado después del debounce
if bot_inc.value() == 0:
conta += 1
print("Contadrp actial",conta)
# Incrementa el contador
if conta > 1000: # Verifica el límite superior
conta = 0
# Interrupción para decrementar el contador con debounce
def dec_conta(pin):
global conta
# Añade un pequeño retraso para el debounce
sleep_ms(DEBOUNCE_TIME_MS)
# Verifica si el botón sigue presionado después del debounce
if bot_dec.value() == 0:
conta -= 1 # Decrementa el contador
if conta < 0: # Verifica el límite inferior
conta = 1000
# Interrupción para resetear el contador a 0 con debounce
def rst_conta(pin):
global conta
# Añade un pequeño retraso para el debounce
sleep_ms(DEBOUNCE_TIME_MS)
# Verifica si el botón sigue presionado después del debounce
if bot_rst.value() == 0:
conta = 0
# Función para obtener dígitos del contador
def get_digitos(conta):
return '{:04}'.format(conta)
# Función para asignar valores a los segmentos
def asignar_segmentos(a, b, c, d, e, f, g):
seg_a.value(a)
seg_b.value(b)
seg_c.value(c)
seg_d.value(d)
seg_e.value(e)
seg_f.value(f)
seg_g.value(g)
# Función para cambiar número a mostrar en un dígito
def cambiar_digito(num):
if (num == 0):
asignar_segmentos(1, 1, 1, 1, 1, 1, 0)
elif (num == 1):
asignar_segmentos(0, 1, 1, 0, 0, 0, 0)
elif (num == 2):
asignar_segmentos(1, 1, 0, 1, 1, 0, 1)
elif (num == 3):
asignar_segmentos(1, 1, 1, 1, 0, 0, 1)
elif (num == 4):
asignar_segmentos(0, 1, 1, 0, 0, 1, 1)
elif (num == 5):
asignar_segmentos(1, 0, 1, 1, 0, 1, 1)
elif (num == 6):
asignar_segmentos(1, 0, 1, 1, 1, 1, 1)
elif (num == 7):
asignar_segmentos(1, 1, 1, 0, 0, 0, 0)
elif (num == 8):
asignar_segmentos(1, 1, 1, 1, 1, 1, 1)
elif (num == 9):
asignar_segmentos(1, 1, 1, 1, 0, 1, 1)
else:
asignar_segmentos(0, 0, 0, 0, 0, 0, 0)
# Función para resetear el valor de los dígitos en 0
def rst_digitos():
dig_1.value(1)
dig_2.value(1)
dig_3.value(1)
dig_4.value(1)
# Función para actualizar los dígitos del display
def actualizar_display(digitos):
#print(digitos)
rst_digitos()
cambiar_digito(int(digitos[3])) # Carga el valor de las unidades
dig_4.value(0) # Muestra el valor de las unidades
time.sleep_ms(5)
dig_4.value(1)
cambiar_digito(int(digitos[2])) # Carga el valor de las decenas
dig_3.value(0) # Muestra el valor de las decenas
time.sleep_ms(5)
dig_3.value(1)
cambiar_digito(int(digitos[1])) # Carga el valor de las centenas
dig_2.value(0) # Muestra el valor de las centenas
time.sleep_ms(5)
dig_2.value(1)
cambiar_digito(int(digitos[0])) # Carga el valor de las unidades de millar
dig_1.value(0) # Muestra el valor de las unidades de millar
time.sleep_ms(5)
# Controles de los botones
bot_inc = Pin(21, Pin.IN, Pin.PULL_UP)
bot_dec = Pin(18, Pin.IN, Pin.PULL_UP)
bot_rst = Pin(16, Pin.IN, Pin.PULL_UP)
bot_inc.irq(inc_conta, machine.Pin.IRQ_FALLING)
bot_dec.irq(trigger=Pin.IRQ_FALLING, handler=dec_conta)
bot_rst.irq(trigger=Pin.IRQ_FALLING, handler=rst_conta)
while(1):
digitos = get_digitos(conta) # Actualiza constantemente el valor del contador
actualizar_display(digitos)