27port = serial.Serial(
"/dev/serial0", 115200, timeout=0.1, write_timeout=0.1)
32starting_device_number = 17
40mc.expect_7bit_responses()
45 (1 << motoron.STATUS_FLAG_PROTOCOL_ERROR) |
46 (1 << motoron.STATUS_FLAG_CRC_ERROR) |
47 (1 << motoron.STATUS_FLAG_COMMAND_TIMEOUT_LATCHED) |
48 (1 << motoron.STATUS_FLAG_MOTOR_FAULT_LATCHED) |
49 (1 << motoron.STATUS_FLAG_NO_POWER_LATCHED) |
50 (1 << motoron.STATUS_FLAG_UART_ERROR) |
51 (1 << motoron.STATUS_FLAG_RESET) |
52 (1 << motoron.STATUS_FLAG_COMMAND_TIMEOUT))
57mc.set_error_response(motoron.ERROR_RESPONSE_COAST)
58mc.set_error_mask(error_mask)
59mc.set_command_timeout_milliseconds(1000)
60for motor
in range(1, motors_per_device + 1):
61 mc.set_max_acceleration(motor, 100)
62 mc.set_max_deceleration(motor, 100)
65mc.device_number = starting_device_number
66mc.set_max_acceleration(1, 800)
67mc.set_max_deceleration(1, 800)
70mc.device_number =
None
72def encode_speeds(speeds):
74 for speed
in speeds: b += [ speed & 0x7F, speed >> 7 & 0x7F ]
77speeds = [0] * device_count * motors_per_device
82 error_index = mc.multi_device_error_check(
83 starting_device_number, device_count)
84 if error_index != device_count:
85 mc.device_number = starting_device_number + error_index
86 print(
"Error check failed for device %d." % mc.device_number, file=sys.stderr)
87 status = mc.get_status_flags()
88 print(
"Status from device %d: 0x%x" % (mc.device_number, status),
90 mc.device_number =
None
96 millis = int(time.monotonic() * 1000)
97 for i
in range(len(speeds)):
98 phase = (millis - 512 * i) % 4096
99 speeds[i] = 400
if phase <= 500
else 0
102 mc.multi_device_write(starting_device_number, device_count,
103 motoron.CMD_SET_ALL_SPEEDS, encode_speeds(speeds))
105except KeyboardInterrupt:
106 mc.device_number =
None
110 mc.device_number =
None
Represents a serial connection to a Pololu Motoron Motor Controller.