Files
2024-07-19 10:16:00 +08:00

54 lines
1.3 KiB
Python

"""
Servo
MicroPython library for the Servo(0~180°)
=======================================================
#Preliminary composition 20220803
dahanzimin From the Mixly Team
"""
from machine import Pin,PWM
class Servo:
__species = {}
__first_init = True
def __new__(cls, pin, *args, **kwargs):
if pin not in cls.__species.keys():
cls.__first_init = True
cls.__species[pin]=object.__new__(cls)
return cls.__species[pin]
def __init__(self,pin):
if self.__first_init:
self.__first_init = False
self._pulse=None
self.pwm = PWM(Pin(pin), duty=0, freq=50)
def servo_write(self,pulse):
self._pulse=pulse
self.pwm.duty_u16(int(1638.375 + 6553.5 * pulse))
def servo_read(self):
return self._pulse
#-------Method usage of class--------
def servo180_angle(pin,angle=None):
if angle is None:
return int(Servo(pin).servo_read()*180)
else:
if not 0<= angle <= 180:
raise ValueError("The effective range of the servo(180) angle is 0~180°")
Servo(pin).servo_write(angle/180)
def servo360_speed(pin,speed=None):
if speed is None:
return int(Servo(pin).servo_read()*200-100)
else:
if not -100<= speed <= 100:
raise ValueError("The effective range of the servo(360) speed is -100~100%")
Servo(pin).servo_write((speed+100)/200)