初始化提交
This commit is contained in:
53
boards/default/micropython/build/lib/servo.py
Normal file
53
boards/default/micropython/build/lib/servo.py
Normal file
@@ -0,0 +1,53 @@
|
||||
"""
|
||||
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)
|
||||
Reference in New Issue
Block a user