import compLib.CompLib_pb2 as CompLib_pb2 from compLib.CompLibClient import CompLibClient MOTOR_COUNT = 4 class Motor(object): """Klasse zum Ansteuern der Motoren """ @staticmethod def power(port: int, percent: float): """Motor auf eine prozentuale Leistung der Höchstgeschwindigkeit einstellen :param port: Port, an welchen der Motor angesteckt ist. 0-3 :param percent: Prozentsatz der Höchstgeschwindigkeit. zwischen -100 und 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.MotorSetPowerRequest() request.header.message_type = request.DESCRIPTOR.full_name request.port = port request.power = percent CompLibClient.send(request.SerializeToString(), request.ByteSize()) @staticmethod def multiple_power(*arguments: tuple[int, float]): """Mehrere Motoren auf eine prozentuale Leistung der Höchstgeschwindigkeit einstellen :param arguments: tuple von port, percentage :raises: IndexError """ request = CompLib_pb2.MotorsSetPowerRequest() request.header.message_type = request.DESCRIPTOR.full_name for port, percent in arguments: 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!") inner_request = CompLib_pb2.MotorSetPowerRequest() inner_request.port = port inner_request.power = percent request.requests.append(inner_request) CompLibClient.send(request.SerializeToString(), request.ByteSize()) @staticmethod def speed(port: int, speed: float): """Geschwindigkeit des Motors einstellen :param port: Port, an welchen der Motor angesteckt ist. 0-3 :param speed: Drehzahl, mit der sich ein Motor dreht, in Centimeter pro Sekunde (cm/s) :raises: IndexError """ if port < 0 or port >= MOTOR_COUNT: raise IndexError("Invalid Motor port specified!") request = CompLib_pb2.MotorSetSpeedRequest() request.header.message_type = request.DESCRIPTOR.full_name request.port = port request.speed = speed CompLibClient.send(request.SerializeToString(), request.ByteSize()) @staticmethod def multiple_speed(*arguments: tuple[int, float]): """Geschwindigkeit mehrerer Motoren einstellen :param arguments: tuple von port, Geschwindigkeit in Radianten pro Sekunde (rad/s) :raises: IndexError """ request = CompLib_pb2.MotorsSetSpeedRequest() request.header.message_type = request.DESCRIPTOR.full_name for port, speed in arguments: if port < 0 or port >= MOTOR_COUNT: raise IndexError("Invalid Motor port specified!") inner_request = CompLib_pb2.MotorSetSpeedRequest() inner_request.port = port inner_request.speed = speed request.requests.append(inner_request) CompLibClient.send(request.SerializeToString(), request.ByteSize()) @staticmethod def pulse_width(port: int, percent: float): """Setzen den Pulsbreite eines Motors in Prozent der Periode :param port: Port, an welchen der Motor angesteckt ist. 0-3 :param percent: Prozent der Periode zwischen -100 und 100 :raises: IndexError """ if port < 0 or port >= MOTOR_COUNT: raise IndexError("Invalid Motor port specified!") request = CompLib_pb2.MotorSetPulseWidthRequest() request.header.message_type = request.DESCRIPTOR.full_name request.port = port request.percent = percent CompLibClient.send(request.SerializeToString(), request.ByteSize()) @staticmethod def multiple_pulse_width(*arguments: tuple[int, float]): """Setzen den Pulsbreite mehrerer Motoren in Prozent der Periode :param arguments: tuple von port, prozent :raises: IndexError """ request = CompLib_pb2.MotorsSetPulseWidthRequest() request.header.message_type = request.DESCRIPTOR.full_name for port, percent in arguments: if port < 0 or port >= MOTOR_COUNT: raise IndexError("Invalid Motor port specified!") inner_request = CompLib_pb2.MotorSetPulseWidthRequest() inner_request.port = port inner_request.percent = percent request.requests.append(inner_request) CompLibClient.send(request.SerializeToString(), request.ByteSize())