#CONCEPTOS PREVIOS
#freq = 1 / Period
#freq = 1 / 20ms
#freq = 50Hz
#1ms / 20ms = 0.05 = 5% duty cycle
#2ms / 20ms = 0.10 = 10% duty cycle
#To get the equivalent pwm duty values:
#0.05 * 1024 = 51.2
#0.10 * 1024 = 102.4
# Cargue el módulo de la máquina para GPIO y PWM
import machine
# Cargar el módulo de tiempo para los retrasos
import time
from machine import Pin
# Crear un objeto GPIO p23 regular
p23 = machine.Pin(23, machine.Pin.OUT)
# Crear otro objeto llamado pwm por
# conectar el controlador pwm al pin
pwm = machine.PWM(p23)
# Establecer el pulso cada 20ms
pwm.freq(50)
# Establecer el servicio inicial en 0
# para apagar el pulso
pwm.duty(0)
# Crea una función para mapear los 0 a 180 grados
# a 20 a 120 valores de servicio pwm
def map(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# Crea otra función para girar
# el servo según el ángulo de entrada
def servo(pin, angle):
pin.duty(map(angle, 0, 180, 20, 120))
# Para girar el servomotor a 0 grados
servo(pwm, 0)
# Para girar el servomotor a 90 grados
servo(pwm, 90)
# Para girar el servomotor a 180 grados
servo(pwm, 180)
# Para rotar el servo de 0 a 180 grados
# en incrementos de 10 grados
for i in range(0, 181, 10):
servo(pwm, i)
time.sleep(0.5)
# Para rotar el servo de 180 a 0 grados
# en decremento de 10 grados
for i in range(180, -1, -10):
servo(pwm, i)
time.sleep(0.5)