from machine import Pin
from time import sleep, time
# Configuración de los displays
displays7seg = {
'dis7seg1': [33, 25, 26, 27, 14, 12, 13],
'dis7seg2': [17, 16, 4, 21, 2, 23, 22]
}
for i in range(7):
displays7seg['dis7seg1'][i] = Pin(displays7seg['dis7seg1'][i], Pin.OUT)
displays7seg['dis7seg2'][i] = Pin(displays7seg['dis7seg2'][i], Pin.OUT)
# Configuración de los semáforos
semaforo1 = [18, 5, 0] # Rojo, Amarillo, Verde
semaforo2 = [19, 32, 15] # Rojo, Amarillo, Verde
for i in range(3):
semaforo1[i] = Pin(semaforo1[i], Pin.OUT)
semaforo2[i] = Pin(semaforo2[i], Pin.OUT)
# Configuración del botón
boton = Pin(34, Pin.IN, Pin.PULL_DOWN) # (presionado = 1, no presionado = 0)
# Números en los displays
numeros = {
9: [1, 1, 1, 1, 0, 1, 1],
8: [1, 1, 1, 1, 1, 1, 1],
7: [1, 1, 1, 0, 0, 0, 0],
6: [1, 0, 1, 1, 1, 1, 1],
5: [1, 0, 1, 1, 0, 1, 1],
4: [0, 1, 1, 0, 0, 1, 1],
3: [1, 1, 1, 1, 0, 0, 1],
2: [1, 1, 0, 1, 1, 0, 1],
1: [0, 1, 1, 0, 0, 0, 0],
0: [1, 1, 1, 1, 1, 1, 0]
}
# Funciones para displays
def onDisplay(num, display):
for i in range(7):
displays7seg[display][i].value(numeros[num][i])
def offDisplay(display):
for pin in displays7seg[display]:
pin.value(0)
# Función de conteo regresivo en los displays
def conteoReg(n):
for i in range(n, -1, -1):
offDisplay('dis7seg1')
onDisplay(i // 10, 'dis7seg1') # Decenas
offDisplay('dis7seg2')
onDisplay(i % 10, 'dis7seg2') # Unidades
sleep(1)
# Funciones para semáforos
def encenderSemaforo(semaforo, color): # color: 0=Rojo, 1=Amarillo, 2=Verde
for i in range(3):
semaforo[i].value(1 if i == color else 0)
def transicionAmarillo(semaforo):
encenderSemaforo(semaforo, 1) # Encender amarillo
sleep(1) # Esperar 1 segundo
semaforo[1].off() # Apagar amarillo
def apagarSemaforos():
for i in range(3):
semaforo1[i].off()
semaforo2[i].off()
# Principal
while True:
# Estado inicial: Semáforo 1 en rojo, Semáforo 2 en verde
encenderSemaforo(semaforo1, 0)
encenderSemaforo(semaforo2, 2)
print("Semáforo 2 en verde, esperando pulsador...")
# Contar pulsaciones del botón
pulsaciones = 0
tiempo_espera = 10 # Tiempo total de espera para pulsaciones en segundos
tiempo_inicial = time() # Capturar el tiempo de inicio de la espera
while time() - tiempo_inicial < tiempo_espera: # Esperar el tiempo definido
if boton.value() == 1: # Botón presionado
while boton.value() == 1:
sleep(0.1) # Esperar a que se libere el botón
pulsaciones += 1
print(f"Pulsaciones detectadas: {pulsaciones}")
sleep(0.1) # Verificar el estado del botón con mayor frecuencia
# Determinar el tiempo acumulado en función de las pulsaciones
if pulsaciones <= 3:
tiempo_acumulado = 20
elif pulsaciones >= 6:
tiempo_acumulado = 10
elif pulsaciones >= 4:
tiempo_acumulado = 15
print(f"Tiempo acumulado calculado: {tiempo_acumulado} segundos")
# Transición: Semáforo 2 verde -> amarillo -> rojo
transicionAmarillo(semaforo2)
encenderSemaforo(semaforo2, 0)
# Transición: Semáforo 1 rojo -> amarillo -> verde
transicionAmarillo(semaforo1)
encenderSemaforo(semaforo1, 2)
print(f"Semáforo 1 en verde por {tiempo_acumulado} segundos")
conteoReg(tiempo_acumulado)
# Transición al volver a la posición inicial
transicionAmarillo(semaforo1) # Semáforo 1 verde -> amarillo -> rojo
encenderSemaforo(semaforo1, 0)
transicionAmarillo(semaforo2) # Semáforo 2 rojo -> amarillo -> verde
encenderSemaforo(semaforo2, 2)
print("Semáforos en posición inicial.")