Skip to content

Commit b3035d3

Browse files
committed
Add value-setter for Robot class
Fixes gpiozero#305
1 parent 42f9d4f commit b3035d3

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

gpiozero/boards.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,20 @@ def __init__(self, left=None, right=None):
776776
right_motor=Motor(*right),
777777
_order=('left_motor', 'right_motor'))
778778

779+
@property
780+
def value(self):
781+
"""
782+
Represents the motion of the robot as a tuple of (left_motor_speed,
783+
right_motor_speed) with ``(-1, -1)`` representing full speed backwards,
784+
``(1, 1)`` representing full speed forwards, and ``(0, 0)``
785+
representing stopped.
786+
"""
787+
return super(Robot, self).value
788+
789+
@value.setter
790+
def value(self, value):
791+
self.left_motor.value, self.right_motor.value = value
792+
779793
def forward(self, speed=1):
780794
"""
781795
Drive the robot forward by running both motors forward.

tests/test_boards.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,20 +617,34 @@ def test_robot():
617617
assert (
618618
[device.pin for device in robot.left_motor] +
619619
[device.pin for device in robot.right_motor]) == pins
620+
assert robot.value == (0, 0)
620621
robot.forward()
621622
assert [pin.state for pin in pins] == [1, 0, 1, 0]
623+
assert robot.value == (1, 1)
622624
robot.backward()
623625
assert [pin.state for pin in pins] == [0, 1, 0, 1]
626+
assert robot.value == (-1, -1)
624627
robot.forward(0.5)
625628
assert [pin.state for pin in pins] == [0.5, 0, 0.5, 0]
629+
assert robot.value == (0.5, 0.5)
626630
robot.left()
627631
assert [pin.state for pin in pins] == [0, 1, 1, 0]
632+
assert robot.value == (-1, 1)
628633
robot.right()
629634
assert [pin.state for pin in pins] == [1, 0, 0, 1]
635+
assert robot.value == (1, -1)
630636
robot.reverse()
631637
assert [pin.state for pin in pins] == [0, 1, 1, 0]
638+
assert robot.value == (-1, 1)
632639
robot.stop()
633640
assert [pin.state for pin in pins] == [0, 0, 0, 0]
641+
assert robot.value == (0, 0)
642+
robot.value = (-1, -1)
643+
assert robot.value == (-1, -1)
644+
robot.value = (0.5, 1)
645+
assert robot.value == (0.5, 1)
646+
robot.value = (0, -0.5)
647+
assert robot.value == (0, -0.5)
634648

635649
def test_ryanteck_robot():
636650
pins = [MockPWMPin(n) for n in (17, 18, 22, 23)]

0 commit comments

Comments
 (0)