import machine
from machine import Pin, Timer
import time

#Definimos tipos
NADA = 0
EVENTO = 1
ESPERA = 2

ARRIBA =1
ABAJO = 2
DERECHA = 3
IZQUIERDA = 4
Verde= Pin(4, Pin.IN, Pin.PULL_UP)
Rojo= Pin(6, Pin.IN, Pin.PULL_UP)
Azul= Pin(7, Pin.IN, Pin.PULL_UP)
Amarillo= Pin(5, Pin.IN, Pin.PULL_UP)
estadoVerde = NADA #Estado del pulsador
estadoRojo = NADA #Estado del pulsador
estadoAzul = NADA #Estado del pulsador
estadoAmarillo = NADA #Estado del pulsador
estadoFSM=0
def FSM(estadoActual,entrada):
    #Esta FSM recibe el estado actual y una entrada
    #que puede ser 1 (arriba), 2(abajo), 3 (izq), 4 (der)
    #y reconoce la secuencia Arrriba, Der, Abajo, Izq

 if estadoActual==0 and entrada==ARRIBA:
     return 1
 if estadoActual==1 and entrada==ARRIBA:
     return 1 #caso de dos arriba seguidos
 if estadoActual==1 and entrada==DERECHA:
     return 2
 if estadoActual==2 and entrada==ABAJO:
     return 3
 if estadoActual==3 and entrada==IZQUIERDA:
     return 4
 return 0

def procesaEntrada(estadoActual,valorPin):
    if estadoActual==NADA and valorPin==False:
     return EVENTO
    if estadoActual==EVENTO:
     return ESPERA
    if estadoActual==ESPERA and valorPin==False:
            return ESPERA
    return NADA

while True:
    time.sleep_ms(5) #Dejamos pasar tiempo para eliminiar bouncing
    #Procesamos la entrada a ver si hay evento
    estadoVerde = procesaEntrada( estadoVerde, Verde.value())
    if (estadoVerde == EVENTO):
        print("Abajo")
        estadoFSM=FSM(estadoFSM,ABAJO)
        estadoAzul = procesaEntrada( estadoAzul, Azul.value())
    #A PARTIR DE ACA NO ANDA!!!!
   
    if (estadoAzul == EVENTO):
        print("Arriba")
        estadoFSM=FSM(estadoFSM,ARRIBA)
        estadoRojo = procesaEntrada( estadoRojo, Rojo.value())
    
    if (estadoRojo == EVENTO):
         print("Izquierda")
         estadoFSM=FSM(estadoFSM,IZQUIERDA)
         estadoAmarillo = procesaEntrada( estadoAmarillo, Amarillo.value())
         print("Derecha")
    
    if (estadoAmarillo == EVENTO):
     estadoFSM=FSM(estadoFSM,DERECHA)
    if (estadoFSM==4):
        print("Konami")
        estadoFSM=0