import time
import machine
servo = machine.PWM(machine.Pin(28))
servo.freq(50)
pot = machine.ADC(machine.Pin(27))
pulsadores = [machine.Pin(3, machine.Pin.IN, machine.Pin.PULL_UP), # Botón para desactivar potenciometro, rojo
machine.Pin(7, machine.Pin.IN, machine.Pin.PULL_UP) # Botón para cambiar angulo maximo, verde
]
estado = 1
angmax = 90
ledr = machine.Pin(21, machine.Pin.OUT) # Indica si el potenciometro está activado o desactivado
ledv = machine.Pin(17, machine.Pin.OUT) # Indica que el angulo maximo es 90
leda = machine.Pin(12, machine.Pin.OUT) # Indica que el angulo maximo es 180
ledr.value(0)
ledv.value(1)
leda.value(0)
#Función para pulsadores
def BTN (pin):
global boton_presionado
global estado
global angmax
pul_ind = pulsadores.index(pin)
tiempo_actual = time.ticks_ms()
if tiempo_actual - boton_presionado > 200: #se ignora si no pasó más de 200 ms desde la última vez
if pul_ind==0:
if estado==0:
estado=1
ledr.value(0)
else:
estado=0
ledr.value(1)
elif pul_ind==1:
if angmax==90:
angmax=180
ledv.value(0)
leda.value(1)
else:
angmax=90
leda.value(0)
ledv.value(1)
boton_presionado = tiempo_actual
boton_presionado = time.ticks_ms()
for pulsador in pulsadores:
pulsador.irq(handler= BTN, trigger=pulsador.IRQ_RISING)
while True:
if estado ==1:
potl = pot.read_u16()
angulo = potl*angmax/65535
ton = int((angulo+42.5)*100000/9)
servo.duty_ns(ton)
time.sleep_ms(250)