from machine import Pin
import time
# --- Mapas de segmentos para números 0-9 (A, B, C, D, E, F, G) ---
numeros = {
0: [1,1,1,1,1,1,0],
1: [0,1,1,0,0,0,0],
2: [1,1,0,1,1,0,1],
3: [1,1,1,1,0,0,1],
4: [0,1,1,0,0,1,1],
5: [1,0,1,1,0,1,1],
6: [1,0,1,1,1,1,1],
7: [1,1,1,0,0,0,0],
8: [1,1,1,1,1,1,1],
9: [1,1,1,1,0,1,1]
}
# --- Pines para cada segmento de los displays ---
# Display decenas: cada segmento tiene su pin individual
decenas_pins = [Pin(i, Pin.OUT) for i in [12, 13, 14, 15, 16, 17, 18]] # A-G del display decenas
# Display unidades: cada segmento tiene su pin individual
unidades_pins = [Pin(i, Pin.OUT) for i in [19, 21, 22, 23, 25, 26, 27]] # A-G del display unidades
# --- Pines para LEDs del semáforo UV ---
led_verde = Pin(2, Pin.OUT)
led_amarillo = Pin(4, Pin.OUT)
led_rojo = Pin(5, Pin.OUT)
# --- Función para mostrar un dígito en un display específico ---
def mostrar_digito(pines_segmentos, digito):
# pines_segmentos: lista de 7 pines (A-G)
# digito: número de 0 a 9
segmentos = numeros.get(digito, [0,0,0,0,0,0,0])
for pin, val in zip(pines_segmentos, segmentos):
# *** CAMBIO AQUÍ: INVERTIMOS EL VALOR ***
# Si val es 1 (para encender el segmento), lo cambiamos a 0 (para apagarlo)
# Si val es 0 (para apagar el segmento), lo cambiamos a 1 (para encenderlo)
# Esto es equivalente a: pin.value(1 - val)
pin.value(1 if val == 0 else 0) # O simplemente pin.value(not val) si 'val' fuera booleano
# Pero con 0 y 1, lo más claro es la línea de abajo:
# pin.value(0 if val == 1 else 1) # Opción alternativa para claridad con 0 y 1
# --- Función para mostrar número de 2 dígitos en ambos displays ---
def mostrar_numero(num):
if num < 0: num = 0
if num > 99: num = 99
d1 = num // 10
d2 = num % 10
mostrar_digito(decenas_pins, d1)
mostrar_digito(unidades_pins, d2)
# --- Función para actualizar LEDs según índice UV ---
def actualizar_leds(uv):
if uv <= 2:
led_verde.on()
led_amarillo.off()
led_rojo.off()
elif 3 <= uv <= 5:
led_verde.off()
led_amarillo.on()
led_rojo.off()
else:
led_verde.off()
led_amarillo.off()
led_rojo.on()
# --- Bucle principal ---
while True:
try:
entrada_temp = input("Ingrese temperatura (0-99): ")
temperatura = int(entrada_temp)
if not 0 <= temperatura <= 99:
print("Temperatura fuera de rango.")
continue
entrada_uv = input("Ingrese índice UV (0-99): ")
uv = int(entrada_uv)
if not 0 <= uv <= 99:
print("Índice UV fuera de rango.")
continue
mostrar_numero(temperatura) # Muestra la temperatura en displays
actualizar_leds(uv) # Actualiza el semáforo con el UV
except Exception as e:
print("Entrada inválida. Intente nuevamente.")