diff --git a/gpiozero/boards.py b/gpiozero/boards.py index 020e099..449a2bb 100644 --- a/gpiozero/boards.py +++ b/gpiozero/boards.py @@ -347,6 +347,16 @@ class Robot(SourceMixin, CompositeDevice): self._left.forward(speed) self._right.backward(speed) + def reverse(self): + """ + Reverse the robot's current motor directions. If the robot is currently + running full speed forward, it will run full speed backward. If the + roboto is turning left at half-speed, it will turn right at half-speed. + If the robot is currently stopped it will remain stopped. + """ + self._left.value = -self._left.value + self._right.value = -self._right.value + def stop(self): """ Stop the robot. diff --git a/gpiozero/output_devices.py b/gpiozero/output_devices.py index 7a36033..197ad27 100644 --- a/gpiozero/output_devices.py +++ b/gpiozero/output_devices.py @@ -255,6 +255,15 @@ class PWMOutputDevice(DigitalOutputDevice): self._stop_blink() self._write(value) + def toggle(self): + """ + Toggle the state of the device. If the device is currently off + (`value` is 0.0), this changes it to "fully" on (`value` is 1.0). If + the device has a duty cycle (`value`) of 0.1, this will toggle it to + 0.9, and so on. + """ + self.value = 1.0 - self.value + @property def is_active(self): """ @@ -414,6 +423,14 @@ class Motor(SourceMixin, CompositeDevice): self._forward.off() self._backward.value = speed + def reverse(self): + """ + Reverse the current direction of the motor. If the motor is currently + idle this does nothing. Otherwise, the motor's direction will be + reversed at the current speed. + """ + self.value = -self.value + def stop(self): """ Stop the motor