from machine import Pin, PWM
from time import sleep
class LED:
def __init__(self, pin):
self.luz = Pin(pin, Pin.OUT)
self.apagar()
def encender(self):
self.luz.on()
def apagar(self):
self.luz.off()
def parpadear(self):
self.luz.on()
sleep(0.3)
self.luz.off()
sleep(0.3)
class Botones:
def __init__(self, pin1, pin2):
self.boton1 = Pin(pin1, Pin.IN, Pin.PULL_UP)
self.boton2 = Pin(pin2, Pin.IN, Pin.PULL_UP)
def leer_boton1(self):
return self.boton1.value() == 0
def leer_boton2(self):
return self.boton2.value() == 0
class Servo:
def __init__(self, pin):
self.motor = PWM(Pin(pin), freq=50)
self.angulo = 0
self.mover(0)
def mover(self, angulo):
self.angulo = max(0, min(180, angulo))
pulso = int(1638 + (self.angulo / 180) * 6553)
self.motor.duty_u16(pulso)
def aumentar(self):
self.mover(self.angulo + 30)
def disminuir(self):
self.mover(self.angulo - 30)
led1 = LED(12)
led2 = LED(14)
led3 = LED(27)
botones = Botones(18, 19)
servo = Servo(13)
etapa = 0
anterior1 = False
anterior2 = False
while True:
b1 = botones.leer_boton1()
b2 = botones.leer_boton2()
pulsacion1 = b1 and not anterior1
pulsacion2 = b2 and not anterior2
anterior1 = b1
anterior2 = b2
if etapa == 0:
led1.encender()
led2.apagar()
led3.apagar()
servo.mover(0)
if pulsacion1:
etapa = 1
elif etapa == 1:
led1.apagar()
led3.apagar()
if pulsacion1:
servo.aumentar()
if pulsacion2:
servo.disminuir()
led2.parpadear()
if servo.angulo >= 180:
etapa = 2
elif etapa == 2:
servo.mover(180)
led1.apagar()
led2.apagar()
led3.encender()
if pulsacion2:
etapa = 3
elif etapa == 3:
led1.apagar()
led3.apagar()
if pulsacion2:
servo.disminuir()
led2.parpadear()
if servo.angulo == 0:
etapa = 0
sleep(0.5)