diff --git a/components/actor/Pololu1376.py b/components/actor/Pololu1376.py index fe13ac3..da391f4 100644 --- a/components/actor/Pololu1376.py +++ b/components/actor/Pololu1376.py @@ -1,7 +1,43 @@ import time import serial +import enum - +class Varid(enum.Enum): + STATUS = 0, + STATUS_ERROR_OCCURED = 1, + STATUS_SERIAL_ERROR_OCCURED = 2, + STATUS_LIMIT_STATUS = 3, + STATUS_RESET_FLAGS = 127, + RC_RC1_UNLIMITED_RAW_VALUE = 4, + RC_RC1_RAW_VALUE = 5, + RC_RC1_SCALED_VALUE = 6, + RC_RC2_UNLIMITED_RAW_VALUE = 8, + RC_RC2_RAW_VALUE = 9, + RC_RC2_SCALED_VALUE = 10, + ANALOG_AN1_UNLIMITED_RAW_VALUE = 12, + ANALOG_AN1_RAW_VALUE = 13, + ANALOG_AN1_SCALED_VALUE = 14, + ANALOG_AN2_UNLIMITED_RAW_VALUE = 16, + ANALOG_AN2_RAW_VALUE = 17, + ANALOG_AN2_SCALED_VALUE = 18, + DIAGNOSTIC_TARGET_SPEED = 20, + DIAGNOSTIC_SPEED = 21, + DIAGNOSTIC_BRAKE_AMOUNT = 22, + DIAGNOSTIC_INPUT_VOLTAGE = 23, + DIAGNOSTIC_TEMPERATURE = 24, + DIAGNOSTIC_RC_PERIOD = 26, + DIAGNOSTIC_BAUDRATE_REGISTER = 27, + DIAGNOSTIC_SYSTEM_TIME_LOW = 28, + DIAGNOSTIC_SYSTEM_TIME_HIGH = 29, + MOTOR_MAX_SPEED_FORWARD = 30, + MOTOR_MAX_ACCEL_FORWARD = 31, + MOTOR_MAX_DECEL_FORWARD = 32, + MOTOR_BREAK_DURATION_FORWARD = 33, + MOTOR_MAX_SPEED_REVERSE = 36, + MOTOR_MAX_ACCEL_REVERSE = 37, + MOTOR_MAX_DECEL_REVERSE = 38, + MOTOR_BREAK_DURATION_REVERSE = 39 + class Pololu1376: def __init__(self, serial_port): self.ser = serial_port @@ -12,6 +48,8 @@ class Pololu1376: self.ser.close() self.ser.open() + self.motor_stop() + print("F/W-Version:", self.get_firmware_version()) def send(self, data): @@ -39,14 +77,14 @@ class Pololu1376: def go(self): return self.cmd("GO") - def motor_forward(self): - return self.cmd("F") + def motor_forward(self, speed_percent): + return self.cmd("F" + str(int(speed_percent)) + "%") - def motor_reverse(self): - return self.cmd("R") + def motor_reverse(self, speed_percent): + return self.cmd("R" + str(int(speed_percent)) + "%") - def motor_brake(self): - return self.cmd("B") + def motor_brake(self, brake_amount_percent): + return self.cmd("B" + str(int(brake_amount_percent)) + "%") def motor_stop(self): return self.cmd("X") @@ -58,13 +96,36 @@ class Pololu1376: return self.cmd("V") def get_variable(self, var): - return self.cmd("L" + str(var)) + return self.cmd("D" + str(var)) +def print_vars(drv): + print ("STATUS :", drv.get_variable(Varid.STATUS.value)) + print ("STATUS_ERROR_OCCURED :", drv.get_variable(Varid.STATUS_ERROR_OCCURED.value)) + print ("STATUS_LIMIT_STATUS :", drv.get_variable(Varid.STATUS_LIMIT_STATUS.value)) + print ("RC_RC1_SCALED_VALUE :", drv.get_variable(Varid.RC_RC1_SCALED_VALUE.value)) + print ("RC_RC2_SCALED_VALUE :", drv.get_variable(Varid.RC_RC2_SCALED_VALUE.value)) + print ("ANALOG_AN1_SCALED_VALUE :", drv.get_variable(Varid.ANALOG_AN1_SCALED_VALUE.value)) + print ("ANALOG_AN2_SCALED_VALUE :", drv.get_variable(Varid.ANALOG_AN2_SCALED_VALUE.value)) + print ("DIAGNOSTIC_TARGET_SPEED :", drv.get_variable(Varid.DIAGNOSTIC_TARGET_SPEED.value)) + print ("DIAGNOSTIC_SPEED :", drv.get_variable(Varid.DIAGNOSTIC_SPEED.value)) + print ("DIAGNOSTIC_TEMPERATURE :", drv.get_variable(Varid.DIAGNOSTIC_TEMPERATURE.value)) + if __name__ == '__main__': ser = serial.Serial("/dev/ttyACM0", 115200) - s = Pololu1376(serial_port=ser) - + drv = Pololu1376(serial_port=ser) + drv.go() + time.sleep(1) + + for speed in range(60, 100, 10): + print("Speed = {}".format(speed)) + drv.motor_forward(speed) + for n in range (0, 10, 1): + print_vars(drv) + time.sleep(0.5) + drv.motor_brake(50) + time.sleep(1) + print("End of program")