# validated: 2017-12-25 TW f9bece2ffbf7 edu/wpi/first/wpilibj/SpeedControllerGroup.java
# ----------------------------------------------------------------------------
# Copyright (c) FIRST 2008-2017. All Rights Reserved.
# Open Source Software - may be modified and shared by FRC teams. The code
# must be accompanied by the FIRST BSD license file in the root directory of
# the project.
# ----------------------------------------------------------------------------
from .interfaces.speedcontroller import SpeedController
from .sendablebase import SendableBase
__all__ = ["SpeedControllerGroup"]
[docs]class SpeedControllerGroup(SendableBase, SpeedController):
"""Allows multiple :class:`.SpeedController` objects to be linked together."""
instances = 0
def __init__(self, speedController, *args):
"""Create a new SpeedControllerGroup with the provided SpeedControllers.
:param args: SpeedControllers to add
:type args: :class:`.SpeedController`
"""
SendableBase.__init__(self)
SpeedController.__init__(self)
self.speedControllers = [speedController] + list(args)
for speedcontroller in self.speedControllers:
self.addChild(speedcontroller)
self.isInverted = False
SpeedControllerGroup.instances += 1
self.setName("SpeedControllerGroup", self.instances)
[docs] def set(self, speed):
for speedController in self.speedControllers:
speedController.set(-speed if self.isInverted else speed)
[docs] def get(self):
if len(self.speedControllers) > 0:
return self.speedControllers[0].get()
return 0.0
[docs] def setInverted(self, isInverted):
self.isInverted = isInverted
[docs] def getInverted(self):
return self.isInverted
[docs] def stopMotor(self):
for speedController in self.speedControllers:
speedController.stopMotor()
[docs] def disable(self):
for speedController in self.speedControllers:
speedController.disable()
[docs] def pidWrite(self, output):
for speedController in self.speedControllers:
speedController.pidWrite(output)
[docs] def initSendable(self, builder):
builder.setSmartDashboardType("Speed Controller")
builder.setSafeState(self.stopMotor)
builder.addDoubleProperty("Value", self.get, self.set)