Mercurial > pony
changeset 4:1ced6f4ec07d
Add a servo-handling library
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 08 May 2016 16:34:13 +0200 |
| parents | b75cc8ff434b |
| children | c1b6dd72fb3c |
| files | servo.py |
| diffstat | 1 files changed, 28 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servo.py Sun May 08 16:34:13 2016 +0200 @@ -0,0 +1,28 @@ +from machine import PWM +import math + + +class Servo: + def __init__(self, pin, freq=100, min_pos=750, max_pos=2550, angle=150): + self.min_pos = min_pos + self.max_pos = max_pos + self.us = 0 + self.freq = freq + self.angle = angle + self.pwm = PWM(pin, freq=freq, duty=0) + + def write_us(self, us): + if us == 0: + self.pwm.duty(0) + return + us = min(self.max_pos, max(self.min_pos, us)) + duty = us * 1024 * self.freq // 1000000 + self.pwm.duty(duty) + + def write_angle(self, degrees=None, radians=None): + if degrees is None: + degrees = math.degrees(radians) + degrees = degrees % 360 + total_range = self.max_pos - self.min_pos + us = self.min_pos + total_range * degrees // self.angle + self.write_us(us)
