from machine import Pin, Timer
# Definición de pines
rojo_coche_pin = Pin(0, Pin.OUT)
amarillo_coche_pin = Pin(1, Pin.OUT)
verde_coche_pin = Pin(2, Pin.OUT)
verde_peaton_pin = Pin(3, Pin.OUT)
rojo_peaton_pin = Pin(4, Pin.OUT)
boton_pin = Pin(5, Pin.IN, Pin.PULL_DOWN)
# Definición de estados del semáforo
ROJO = 0
AMARILLO = 1
VERDE = 2
# Inicialización del estado del semáforo
estado_semaforo_coche = ROJO
estado_semaforo_peaton = ROJO
# Funciones para cambiar el estado del semáforo
def cambiar_semaforo_coche(t):
global estado_semaforo_coche
if estado_semaforo_coche == ROJO:
estado_semaforo_coche = VERDE
elif estado_semaforo_coche == VERDE:
estado_semaforo_coche = AMARILLO
elif estado_semaforo_coche == AMARILLO:
estado_semaforo_coche = ROJO
actualizar_semaforo_coche()
def cambiar_semaforo_peaton(t):
global estado_semaforo_peaton
if estado_semaforo_peaton == ROJO:
estado_semaforo_peaton = VERDE
else:
estado_semaforo_peaton = ROJO
actualizar_semaforo_peaton()
# Función para actualizar el estado del semáforo de coches
def actualizar_semaforo_coche():
if estado_semaforo_coche == ROJO:
rojo_coche_pin.value(1)
amarillo_coche_pin.value(0)
verde_coche_pin.value(0)
elif estado_semaforo_coche == AMARILLO:
rojo_coche_pin.value(0)
amarillo_coche_pin.value(1)
verde_coche_pin.value(0)
elif estado_semaforo_coche == VERDE:
rojo_coche_pin.value(0)
amarillo_coche_pin.value(0)
verde_coche_pin.value(1)
# Función para actualizar el estado del semáforo de peatones
def actualizar_semaforo_peaton():
if estado_semaforo_peaton == ROJO:
rojo_peaton_pin.value(1)
verde_peaton_pin.value(0)
else:
rojo_peaton_pin.value(0)
verde_peaton_pin.value(1)
# Configuración de temporizadores para cambiar el estado del semáforo
tim1 = Timer(0)
tim2 = Timer(1)
tim1.init(period=10000, mode=Timer.PERIODIC, callback=cambiar_semaforo_coche)
tim2.init(period=15000, mode=Timer.PERIODIC, callback=cambiar_semaforo_peaton)
# Bucle principal
while True:
if boton_pin.value() == 1:
# Si se presiona el botón, activar el paso peatonal
estado_semaforo_peaton = VERDE
actualizar_semaforo_peaton()
# Esperar un tiempo para que los peatones crucen
utime.sleep(10)
estado_semaforo_peaton = ROJO
actualizar_semaforo_peaton()