import max7219
from machine import Pin, SPI
import time

# Configuración de la pantalla max7219
spi = SPI(1, baudrate=10000000, polarity=1, phase=0, sck=Pin(4), mosi=Pin(2))
ss = Pin(5, Pin.OUT)
display = max7219.Matrix8x8(spi, ss, 4)

# Configuración de los pines para los botones
boton_ascendente = Pin(13, Pin.IN, Pin.PULL_UP)  # Pin 13 como botón de conteo ascendente
boton_descendente = Pin(12, Pin.IN, Pin.PULL_UP) # Pin 12 como botón de conteo descendente
boton_reiniciar = Pin(14, Pin.IN, Pin.PULL_UP)   # Pin 14 como botón de reiniciar
boton_pausa = Pin(27, Pin.IN, Pin.PULL_UP)       # Pin 27 como botón de pausa

contador = 0
congelado = False
modo = "ascendente"  # Modo inicial del contador
debounce_time = 0.05  # Tiempo de debounce para los botones

def mostrar_contador():
    display.fill(0)
    display.text(str(contador), 0, 0, 1)
    display.show()

def debounce(pin):
    if not pin.value():
        time.sleep(debounce_time)
        if not pin.value():
            return True
    return False

while True:
    if debounce(boton_ascendente):
        modo = "ascendente"
        congelado = False

    if debounce(boton_descendente):
        modo = "descendente"
        congelado = False

    if debounce(boton_reiniciar):
        contador = 0
        mostrar_contador()

    if debounce(boton_pausa):
        congelado = not congelado

    if not congelado:
        if modo == "ascendente":
            contador += 1
            if contador > 9999:  # Reiniciar si supera 9999
                contador = 0
        elif modo == "descendente":
            contador -= 1
            if contador < 0:
                contador = 9999
        mostrar_contador()
        time.sleep(0.05)  # Ajustar la velocidad del conteo a 0.05 segundos

    time.sleep(0.01)  # Pequeña pausa para reducir la carga del bucle