from machine import Pin
from time import sleep
# Configuración de los pines de salida para el display
A = Pin(15, Pin.OUT)
B = Pin(2, Pin.OUT)
C = Pin(4, Pin.OUT)
D = Pin(5, Pin.OUT)
E = Pin(18, Pin.OUT)
F = Pin(19, Pin.OUT)
G = Pin(21, Pin.OUT)
P = Pin(22, Pin.OUT) # Indicador de signo negativo
# Configuración de los pines de entrada para el encoder
SA = Pin(25, Pin.IN) # CLK
SB = Pin(26, Pin.IN) # DT
# Definición de los segmentos para los números del display de 0 a 9
Serie = ("1111110", "0110000", "1101101", "1111001", "0110011",
"1011011", "1011111", "1110000", "1111111", "1111011")
# Variables globales
pul = 0
dat = 0
# Función para desplegar un número en el display
def Dis(x, negativo=False):
A.value(int(x[0]))
B.value(int(x[1]))
C.value(int(x[2]))
D.value(int(x[3]))
E.value(int(x[4]))
F.value(int(x[5]))
G.value(int(x[6]))
P.value(1 if negativo else 0) # Activa P si el número es negativo
# Función para incrementar el contador
def Anti(pin):
global pul, dat
if SA.value() == 0:
pul += 1
print("Pulsos:", pul)
while SB.value() == 0:
sleep(0.002)
if pul >= 15:
pul = 0
if dat < 9: # Limitar el valor superior a 9
dat += 1
Dis(Serie[abs(dat)], negativo=(dat < 0))
# Función para decrementar el contador
def Hora(pin):
global pul, dat
if SB.value() == 0:
pul -= 1
print("Pulsos:", pul)
while SA.value() == 0:
sleep(0.002)
if pul <= -15:
pul = 0
if dat > -9: # Limitar el valor inferior a -9
dat -= 1
Dis(Serie[abs(dat)], negativo=(dat < 0))
# Configuración de interrupciones
SA.irq(trigger=Pin.IRQ_FALLING, handler=Hora)
SB.irq(trigger=Pin.IRQ_FALLING, handler=Anti)
# Mostrar el valor inicial
Dis(Serie[dat])
# Bucle principal
while True:
pass