import machine
from machine import Pin,Timer
import tm1637
from tm1637 import TM1637

switch = Pin(22,Pin.IN,Pin.PULL_UP)

led1Rojo = Pin(14,Pin.OUT)
led1Amarillo = Pin(12,Pin.OUT)
led1Verde = Pin(13,Pin.OUT)

led2Rojo = Pin(4,Pin.OUT)
led2Amarillo = Pin(2,Pin.OUT)
led2Verde = Pin(15,Pin.OUT)

display = TM1637(clk = Pin(5), dio = Pin(18))
display.number(0)

contador = 0
estado = 0

#semaforo1
def semaforo1R():#Rojo
    led1Rojo.value(1)
    led1Amarillo.value(0)
    led1Verde.value(0)
def semaforo1V():
    led1Rojo.value(0)
    led1Amarillo.value(0)
    led1Verde.value(1)
def semaforo1A():
    led1Rojo.value(0)
    led1Amarillo.value(1)
    led1Verde.value(0)
def semaforo1Apagado():
    led1Rojo.value(0)
    led1Amarillo.value(0)
    led1Verde.value(0)
#semaforo2
def semaforo2R():
    led2Rojo.value(1)
    led2Amarillo.value(0)
    led2Verde.value(0)
def semaforo2V():
    led2Rojo.value(0)
    led2Amarillo.value(0)
    led2Verde.value(1)
def semaforo2A():
    led2Rojo.value(0)
    led2Amarillo.value(1)
    led2Verde.value()
def semaforo2Apagado():
    led2Rojo.value(0)
    led2Amarillo.value(0)
    led2Verde.value(0)

def estadoCero():#V R
    semaforo1V()
    semaforo2R()
def estadoUno():#A R
    semaforo1A()
    semaforo2R()
def estadoDos():#R V
    semaforo1R()
    semaforo2V()
def estadoTres():#R A
    semaforo1R()
    semaforo2A()
def estadoCuatro():#0 0
    semaforo1Apagado()
    semaforo2Apagado()

def FSM(t):
    global contador
    global estado
    contador += 1
    if estado < 4 and switch.value():#SWITCH ON
        estado = 4
        estadoCuatro()
    elif estado == 4 and switch.value():
        estado = 5
        semaforo1A()
        semaforo2A()
    elif estado == 5 and switch.value():
        estado = 4
        estadoCuatro()
    elif estado == 4 and not switch.value():
        contador = 0
        estadoCero()
    elif estado == 0 and contador == 6:#CICLOS DEL SEMAFORO CON SWITCH OFF
        estado = 1
        contador = 0
        estadoUno()
    elif estado == 1 and contador == 3:
        estado = 2
        contador = 0
        estadoDos()
    elif estado == 2 and contador == 4:
        estado = 3
        contador = 0
        estadoTres()
    elif estado == 3 and contador == 2:
        estado = 0
        contador = 0
        estadoCero()
    display.number(contador)


estadoCero()
elTimer = Timer(1)
elTimer.init(mode = Timer.PERIODIC, period = 1000, callback = FSM)










4-Digit Display