# Programa para mover un servomotor 180° 
'''Se realiza la conexión del servomotor a la tarjeta, a una alimentación de 
5 voltios cable rojo, tierra cable negro y la señal del potenciometro PWM al pin 21'''

'''La primera linea Importa la señal del pin de la 
tarjeta ESP 32 y la señal del PWM 
que realiza el movimiento del servo, la segunda linea 
importa el tiempo en milisegundos que se mueve el servo'''

#Modulos
from machine import Pin, PWM
from utime import sleep, sleep_ms

'''Declaro el sensor, indicando que se encuentra en el
pin 18 de la tarjeta ESP32 y funciona a una frecuencia de 50Hz que equivalen
a 20ms de acuerdo con el fabricante'''

#Objeto
Servo=PWM (Pin(21), freq=50)

'''Ciclo mientras afirmativo, realiza la operación de que mientras
el servo transcurre en el ciclo 1 genere un recorrido de acuerdo con la
resolución en un rango de 1800 a 8000'''
''' El servo realiza un recorrido en el ciclo de trabajo en un tiempo de 1 ms '''

def Map(valor, in_min, in_max, out_min, out_max):
    return (valor - in_min) * (out_max - out_min) // (in_max - in_min) + out_min



def servo(ang):
    nAng = Map(ang,0,180 , 1800,8000)
    Servo.duty_u16(nAng)


servo(0)
sleep(1)
print("Ang: 0")

servo(45)
sleep(1)
print("Ang: 45")

servo(90)
sleep(1)
print("Ang: 90")

servo(135)
sleep(1)
print("Ang: 135")

servo(180)
sleep(1)
print("Ang: 180")





'''
while True:
     for i in range(1800, 8000):
        servo.duty_u16(i)
        sleep_ms(1)
'''

'''Cierre de la programación'''