| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 | .. _pyb.Servo:
class Servo -- 3-wire hobby servo driver
========================================
Servo objects control standard hobby servo motors with 3-wires (ground, power,
signal).  There are 4 positions on the pyboard where these motors can be plugged
in: pins X1 through X4 are the signal pins, and next to them are 4 sets of power
and ground pins.
Example usage::
    import pyb
    s1 = pyb.Servo(1)   # create a servo object on position X1
    s2 = pyb.Servo(2)   # create a servo object on position X2
    s1.angle(45)        # move servo 1 to 45 degrees
    s2.angle(0)         # move servo 2 to 0 degrees
    # move servo1 and servo2 synchronously, taking 1500ms
    s1.angle(-60, 1500)
    s2.angle(30, 1500)
.. note:: The Servo objects use Timer(5) to produce the PWM output.  You can
   use Timer(5) for Servo control, or your own purposes, but not both at the
   same time.
Constructors
------------
.. class:: pyb.Servo(id)
   Create a servo object.  ``id`` is 1-4, and corresponds to pins X1 through X4.
Methods
-------
.. method:: servo.angle([angle, time=0])
   If no arguments are given, this function returns the current angle.
   If arguments are given, this function sets the angle of the servo:
     - ``angle`` is the angle to move to in degrees.
     - ``time`` is the number of milliseconds to take to get to the specified
       angle.  If omitted, then the servo moves as quickly as possible to its
       new position.
.. method:: servo.speed([speed, time=0])
   If no arguments are given, this function returns the current speed.
   If arguments are given, this function sets the speed of the servo:
     - ``speed`` is the speed to change to, between -100 and 100.
     - ``time`` is the number of milliseconds to take to get to the specified
       speed.  If omitted, then the servo accelerates as quickly as possible.
.. method:: servo.pulse_width([value])
   If no arguments are given, this function returns the current raw pulse-width
   value.
   If an argument is given, this function sets the raw pulse-width value.
.. method:: servo.calibration([pulse_min, pulse_max, pulse_centre, [pulse_angle_90, pulse_speed_100]])
   If no arguments are given, this function returns the current calibration
   data, as a 5-tuple.
   If arguments are given, this function sets the timing calibration:
     - ``pulse_min`` is the minimum allowed pulse width.
     - ``pulse_max`` is the maximum allowed pulse width.
     - ``pulse_centre`` is the pulse width corresponding to the centre/zero position.
     - ``pulse_angle_90`` is the pulse width corresponding to 90 degrees.
     - ``pulse_speed_100`` is the pulse width corresponding to a speed of 100.
 |