from machine import Pin
from time import sleep
# Pines de las bobinas del motor
dir_1 = Pin(19, Pin.OUT)
dir_2 = Pin(18, Pin.OUT)
dir_3 = Pin(5, Pin.OUT)
dir_4 = Pin(17, Pin.OUT)
indicador_1 = Pin(23, Pin.OUT)
indicador_2 = Pin(22, Pin.OUT)
indicador_3 = Pin(21, Pin.OUT)
push_direccion = Pin(12, Pin.IN, Pin.PULL_UP)
push_inicio = Pin(14, Pin.IN, Pin.PULL_UP)
push_modo = Pin(27, Pin.IN, Pin.PULL_UP)
en_movimiento = False
direccion = 1
modo = 0
retardos = [0.3, 0.5, 0.7]
secuencias = [
[(1,0,0,0), (0,1,0,0), (0,0,1,0), (0,0,0,1)], # secuencia 1
[(1,1,0,0), (0,1,1,0), (0,0,1,1), (1,0,0,1)], # secuencia 2
[(1,0,0,0), (1,1,0,0), (0,1,0,0), (0,1,1,0),
(0,0,1,0), (0,0,1,1), (0,0,0,1), (1,0,0,1)] # secuencia 3
]
def apagar_leds():
indicador_1.value(0)
indicador_2.value(0)
indicador_3.value(0)
def actualizar_led():
apagar_leds()
if modo == 0: indicador_1.value(1)
elif modo == 1: indicador_2.value(1)
elif modo == 2: indicador_3.value(1)
def activar_bobinas(a, b, c, d):
dir_1.value(a)
dir_2.value(b)
dir_3.value(c)
dir_4.value(d)
def hacer_secuencia():
seq = secuencias[modo]
retardo = retardos[modo]
pasos = seq if direccion > 0 else list(reversed(seq))
for paso in pasos:
activar_bobinas(*paso)
sleep(retardo)
def cb_direccion(pin):
global direccion
direccion = -direccion
sleep(0.1)
def cb_arranque(pin):
global en_movimiento
en_movimiento = not en_movimiento
sleep(0.1)
def cb_modo(pin):
global modo
modo = (modo + 1) % 3
actualizar_led()
sleep(0.25)
push_direccion.irq(trigger=Pin.IRQ_FALLING, handler=cb_direccion)
push_inicio.irq(trigger=Pin.IRQ_FALLING, handler=cb_arranque)
push_modo.irq(trigger=Pin.IRQ_FALLING, handler=cb_modo)
actualizar_led()
while(1):
if en_movimiento:
hacer_secuencia()
else:
activar_bobinas(0, 0, 0, 0)
sleep(0.1)