import compLib.CompLib_pb2 as CompLib_pb2 from compLib.CompLibClient import CompLibClient MOTOR_COUNT = 4 class Motor(object): """Class used to control the motors """ @staticmethod def power(port: int, percent: float): """Set specified motor to percentage power :param port: Port, which the motor is connected to. 0-3 :param percent: Percentage of max speed. between -100 and 100 :raises: IndexError """ if port < 0 or port >= MOTOR_COUNT: raise IndexError("Invalid Motor port specified!") if percent < -100 or percent > 100: raise IndexError("Invalid Motor speed specified! Speed is between -100 and 100 percent!") request = CompLib_pb2.MotorsSetPowerRequest() request.header.message_type = request.DESCRIPTOR.full_name request.port = port request.power = percent CompLibClient.send(request.SerializeToString(), request.ByteSize()) @staticmethod def speed(port: int, speed: float): """Set specified motor to percentage power :param port: Port, which the motor is connected to. 0-3 :param speed: Speed at which a motor should turn in RPM :raises: IndexError """ if port < 0 or port >= MOTOR_COUNT: raise IndexError("Invalid Motor port specified!") request = CompLib_pb2.MotorsSetSpeedRequest() request.header.message_type = request.DESCRIPTOR.full_name request.port = port request.speed = speed CompLibClient.send(request.SerializeToString(), request.ByteSize()) # @staticmethod # def all_off(): # """ # Turns of all motors # """ # Logging.get_logger().debug(f"Motor.all_off") # # for i in range(1, MOTOR_COUNT + 1): # Motor.active_break(i) # @staticmethod # def active_break(port: int): # """ # Actively break with a specific motor # # :param port: Port, which the motor is connected to. 1-4 # """ # Motor.pwm(port, 0, MotorMode.BREAK)