#Modulos
from machine import Pin, PWM #Para la ESP32, cargamos la maquina e importamos la clase Pin de retorno de voltaje y el PWM - pulso de ancho modulado
from utime import sleep, sleep_ms #importamos utime para manejo del tiempo y fecha, para tener acceso a la clase sleep.
"""El servomotor trabaja a una frecuencia de 50 hz
La equivalencia del pilso que ,aneja el tiempo con respeto al ángulo va desde 0 a 1 en posición de reposo 0° del brazo con una resolución 10 bits que
va desde 0 a 51. La de 16bits va desde 3277 en nanoseg quedaría de 0 a 1000000
para mover el brazo a 180° se debe manejar pukso que van desde 2 a 2.5 que nos lleva a 2000000 a 2500000 en ns
la linea de trabajo según la ecuación de orden 2 queda ((3.06084 *angulo180° **2+10278*180° + 550000))
"""
servo =PWM (Pin(18), freq =50) #se define el objeto servo, referenciando para pwm la entrada por el pin 18
# y la frecuencia de 50 Hz recomendada por fabrica
while True: #Creamos un bucle.
for angulo in range(0, 180): #definimosla variable de incremento "angulo" que define una acción repetitiva "for" que hga que el brazo del servomotor se desplace de la posición de reposo 0° hasta 180°
# ala variable duty se asigna la salida de la ecuación de 2° orden proyectada
duty= ((3.06084 *angulo **2+10278*angulo + 550000))
#Convertimos las unidades de la variable duty nanosegundos
conversion = duty/1000000
#calculamos el tiempo de recurrencia del ángulo 180°) en la variaable duty1
# con 1023 de resolución y lo dividimos entre el período del pulso que es 20 y convetimos la salida de valor a entero (int) duty_final = int(conversion *1023/20)
duty1=int(conversion*1023/20)
servo.duty(duty1) #Asignamos finalmente el valor del ángulo de desplazamiento (duty1)
sleep_ms(50) #programamos un retardo en milisegundos antes de que el brazo se desplace a su posición de reposo