117 lines
3.7 KiB
Python
117 lines
3.7 KiB
Python
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 multiple_power(*arguments: tuple[int, float]):
|
|
"""Set specified motors to percentage power
|
|
|
|
:param arguments: tuples of 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):
|
|
"""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 multiple_speed(*arguments: tuple[int, float]):
|
|
"""Set specified motor to percentage power
|
|
|
|
:param arguments: tuples of port, speed in rpm
|
|
: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 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)
|