Skip to content

Commit

Permalink
Merge branch 'angular_initial_none'
Browse files Browse the repository at this point in the history
  • Loading branch information
waveform80 committed Feb 20, 2018
2 parents bb0eced + 51db75e commit 1214da7
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
4 changes: 3 additions & 1 deletion gpiozero/output_devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -1212,7 +1212,9 @@ def __init__(
frame_width=20/1000, pin_factory=None):
self._min_angle = min_angle
self._angular_range = max_angle - min_angle
if ((min_angle <= initial_angle <= max_angle) or
if initial_angle is None:
initial_value = None
elif ((min_angle <= initial_angle <= max_angle) or
(max_angle <= initial_angle <= min_angle)):
initial_value = 2 * ((initial_angle - min_angle) / self._angular_range) - 1
else:
Expand Down
42 changes: 40 additions & 2 deletions tests/test_outputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,10 @@ def setup_function(function):
'test_servo_close',
'test_servo_pulse_width',
'test_servo_values',
'test_servo_initial_values',
'test_angular_servo_range',
'test_angular_servo_angles',
'test_angular_servo_initial_angles',
) else MockPin

def teardown_function(function):
Expand Down Expand Up @@ -1014,7 +1016,7 @@ def test_servo_pins_nonpwm():

def test_servo_close():
p = Device.pin_factory.pin(2)
with Servo(1) as device:
with Servo(2) as device:
device.close()
assert device.closed
assert device.pwm_device.pin is None
Expand All @@ -1023,7 +1025,7 @@ def test_servo_close():

def test_servo_pulse_width():
p = Device.pin_factory.pin(2)
with Servo(1, min_pulse_width=5/10000, max_pulse_width=25/10000) as device:
with Servo(2, min_pulse_width=5/10000, max_pulse_width=25/10000) as device:
assert isclose(device.min_pulse_width, 5/10000)
assert isclose(device.max_pulse_width, 25/10000)
assert isclose(device.frame_width, 20/1000)
Expand All @@ -1035,6 +1037,26 @@ def test_servo_pulse_width():
device.value = None
assert device.pulse_width is None

def test_servo_initial_values():
p = Device.pin_factory.pin(2)
with Servo(2) as device:
assert device.value == 0
with Servo(2, initial_value=-1) as device:
assert device.is_active
assert device.value == -1
assert isclose(p.state, 0.05)
with Servo(2, initial_value=0) as device:
assert device.is_active
assert device.value == 0
assert isclose(p.state, 0.075)
with Servo(2, initial_value=1) as device:
assert device.is_active
assert device.value == 1
assert isclose(p.state, 0.1)
with Servo(2, initial_value=None) as device:
assert not device.is_active
assert device.value is None

def test_servo_values():
p = Device.pin_factory.pin(1)
with Servo(1) as device:
Expand Down Expand Up @@ -1068,6 +1090,22 @@ def test_angular_servo_range():
assert device.min_angle == 0
assert device.max_angle == 90

def test_angular_servo_initial_angles():
p = Device.pin_factory.pin(1)
with AngularServo(1) as device:
assert device.angle == 0
with AngularServo(1, initial_angle=-90) as device:
assert device.angle == -90
assert isclose(device.value, -1)
with AngularServo(1, initial_angle=0) as device:
assert device.angle == 0
assert isclose(device.value, 0)
with AngularServo(1, initial_angle=90) as device:
assert device.angle == 90
assert isclose(device.value, 1)
with AngularServo(1, initial_angle=None) as device:
assert device.angle is None

def test_angular_servo_angles():
p = Device.pin_factory.pin(1)
with AngularServo(1) as device:
Expand Down

0 comments on commit 1214da7

Please sign in to comment.