from machine import Pin, Timer # type: ignore
import time
# Configuración de pines
button_set = Pin(12, Pin.IN, Pin.PULL_UP)
button_inc = Pin(13, Pin.IN, Pin.PULL_UP)
button_dec = Pin(14, Pin.IN, Pin.PULL_UP)
button_reset = Pin(27, Pin.IN, Pin.PULL_UP)
led = Pin(26, Pin.OUT)
# Definición de pines para el display de 7 segmentos
segments = [Pin(2, Pin.OUT), Pin(4, Pin.OUT), Pin(5, Pin.OUT), Pin(18, Pin.OUT), Pin(19, Pin.OUT), Pin(21, Pin.OUT), Pin(22, Pin.OUT)]
digit1 = Pin(23, Pin.OUT)
digit2 = Pin(15, Pin.OUT)
# Patrón de segmentos para los números 0-9
digit_patterns = [
[1, 1, 1, 1, 1, 1, 0], # 0
[0, 1, 1, 0, 0, 0, 0], # 1
[1, 1, 0, 1, 1, 0, 1], # 2
[1, 1, 1, 1, 0, 0, 1], # 3
[0, 1, 1, 0, 0, 1, 1], # 4
[1, 0, 1, 1, 0, 1, 1], # 5
[1, 0, 1, 1, 1, 1, 1], # 6
[1, 1, 1, 0, 0, 0, 0], # 7
[1, 1, 1, 1, 1, 1, 1], # 8
[1, 1, 1, 1, 0, 1, 1], # 9
]
# Variables globales
counter = 10 # Valor inicial del contador
setting_mode = False
default_counter = 10 # Valor predeterminado del contador
def display_digit(digit, value):
for i in range(7):
segments[i].value(digit_patterns[value][i])
digit1.value(1 if digit == 1 else 0)
digit2.value(0 if digit == 1 else 1)
time.sleep(0.005)
def display_number(number):
tens = number // 10
ones = number % 10
display_digit(1, tens if number >= 10 else 0)
display_digit(2, ones)
def blink_led():
for _ in range(10):
led.value(1)
time.sleep(0.1)
led.value(0)
time.sleep(0.1)
def countdown(timer):
global counter
if counter > 0:
counter -= 1
else:
timer.deinit()
blink_led()
led.value(0)
reset_counter()
def reset_counter():
global counter
counter = default_counter # Reset al valor predeterminado
timer.init(period=1000, mode=Timer.PERIODIC, callback=countdown)
def button_check():
global counter, setting_mode, default_counter
if button_set.value() == 0:
setting_mode = not setting_mode
if setting_mode:
timer.deinit() # Detener el contador en modo de configuración
else:
default_counter = counter # Establecer el nuevo valor predeterminado
reset_counter() # Reiniciar el contador con el nuevo valor predeterminado
time.sleep(0.005)
if button_inc.value() == 0 and setting_mode:
counter = min(99, counter + 1)
time.sleep(0.005)
# Wait for the button to be released
while button_inc.value() == 0:
display_number(counter)
time.sleep(0.005)
if button_dec.value() == 0 and setting_mode:
counter = max(0, counter - 1)
time.sleep(0.005)
# Wait for the button to be released
while button_dec.value() == 0:
display_number(counter)
time.sleep(0.005)
if button_reset.value() == 0:
reset_counter()
time.sleep(0.005)
# Temporizadores
timer = Timer(0)
timer.init(period=1000, mode=Timer.PERIODIC, callback=countdown)
while True:
display_number(counter)
button_check()
time.sleep(0.5)Set
Inc
Dec
Res