Add value-setter for Robot class

Fixes #305
This commit is contained in:
Andrew Scheller
2016-05-28 13:50:47 +01:00
parent 42f9d4f3b8
commit b3035d306e
2 changed files with 28 additions and 0 deletions

View File

@@ -776,6 +776,20 @@ class Robot(SourceMixin, CompositeDevice):
right_motor=Motor(*right),
_order=('left_motor', 'right_motor'))
@property
def value(self):
"""
Represents the motion of the robot as a tuple of (left_motor_speed,
right_motor_speed) with ``(-1, -1)`` representing full speed backwards,
``(1, 1)`` representing full speed forwards, and ``(0, 0)``
representing stopped.
"""
return super(Robot, self).value
@value.setter
def value(self, value):
self.left_motor.value, self.right_motor.value = value
def forward(self, speed=1):
"""
Drive the robot forward by running both motors forward.

View File

@@ -617,20 +617,34 @@ def test_robot():
assert (
[device.pin for device in robot.left_motor] +
[device.pin for device in robot.right_motor]) == pins
assert robot.value == (0, 0)
robot.forward()
assert [pin.state for pin in pins] == [1, 0, 1, 0]
assert robot.value == (1, 1)
robot.backward()
assert [pin.state for pin in pins] == [0, 1, 0, 1]
assert robot.value == (-1, -1)
robot.forward(0.5)
assert [pin.state for pin in pins] == [0.5, 0, 0.5, 0]
assert robot.value == (0.5, 0.5)
robot.left()
assert [pin.state for pin in pins] == [0, 1, 1, 0]
assert robot.value == (-1, 1)
robot.right()
assert [pin.state for pin in pins] == [1, 0, 0, 1]
assert robot.value == (1, -1)
robot.reverse()
assert [pin.state for pin in pins] == [0, 1, 1, 0]
assert robot.value == (-1, 1)
robot.stop()
assert [pin.state for pin in pins] == [0, 0, 0, 0]
assert robot.value == (0, 0)
robot.value = (-1, -1)
assert robot.value == (-1, -1)
robot.value = (0.5, 1)
assert robot.value == (0.5, 1)
robot.value = (0, -0.5)
assert robot.value == (0, -0.5)
def test_ryanteck_robot():
pins = [MockPWMPin(n) for n in (17, 18, 22, 23)]