import serial import struct # 定义串口通信参数 SERIAL_PORT = 'COM5' # 替换为你的串口名称 BAUDRATE = 9600 # 波特率 TIMEOUT = 1 # 秒 # 定义指令集 CMD_MULT_SERVO_MOVE = 0x03 # 控制多个舵机的转动 CMD_FULL_ACTION_RUN = 0x06 # 动作组运行 CMD_FULL_ACTION_STOP = 0x07 # 停止正在运行的动作 CMD_FULL_ACTION_ERASE = 0x08 # 擦除动作组 CMD_BLE_SERVO_DOWNLOAD = 0x25 # 通过蓝牙下载动作组 # 初始化串口 ser = serial.Serial(SERIAL_PORT, BAUDRATE, timeout=TIMEOUT) def build_data_packet(cmd, params): """ 构建数据包。 :param cmd: 指令码 :param params: 参数列表 :return: 打包后的数据 """ length = len(params) + 2 # 2为指令和长度本身占用的字节 packet = bytearray([0x55, 0x55, length]) # 帧头和数据长度 packet.extend(struct.pack('B',cmd)) # 指令 for param in params: if isinstance(param, int): packet.extend(struct.pack('B', param)) # 参数 else: raise ValueError("参数必须是整数类型") # 参数 checksum = sum(packet) & 0xFF # 计算校验和 packet.append(checksum) # 添加校验和 return packet def send_data_packet( packet ): """ 发送数据包。 :param packet: 打包后的数据 """ ser.write(packet) def move_servos( servo_count, time, servo_ids, positions ): """ 控制多个舵机的转动。 :param servo_count: 要控制舵机的个数 :param time: 执行时间(秒) :param servo_ids: 舵机ID列表 :param positions: 舵机角度列表 """ params = [servo_count, int(time), int(time >> 8)] # 时间的低8位和高8位 params.extend([servo_id, pos, pos >> 8] for servo_id, pos in zip(servo_ids, positions)) packet = build_data_packet(CMD_MULT_SERVO_MOVE, params) send_data_packet(packet) def run_full_action( action_number, times ): """ 动作组运行。 :param action_number: 动作组编号 :param times: 执行次数(无限次则为0) """ params = [action_number, int(times), int(times >> 8)] packet = build_data_packet(CMD_FULL_ACTION_RUN, params) send_data_packet(packet) def stop_full_action(): """ 停止正在运行的动作。 """ packet = build_data_packet(CMD_FULL_ACTION_STOP, []) send_data_packet(packet) def erase_full_action(): """ 擦除动作组。 """ packet = build_data_packet(CMD_FULL_ACTION_ERASE, [0x00]) # 保留参数 send_data_packet(packet) # 示例:移动两个舵机 move_servos( 1,1, [1], [45]) # 示例:运行动作组 # run_full_action(1, 1) # # # 示例:停止所有动作 # stop_full_action() # # # 示例:擦除动作组 # erase_full_action() # 关闭串口 ser.close()
上面是利用AI写的代码,但是在pycharm中运行后出现了以下错误
Traceback (most recent call last):
File "C:\Users\adminster\Desktop\机器臂\pythonProject\text.py", line 83, in <module>
move_servos( 1,1, [1], [45])
File "C:\Users\adminster\Desktop\机器臂\pythonProject\text.py", line 55, in move_servos
packet = build_data_packet(CMD_MULT_SERVO_MOVE, params)
File "C:\Users\adminster\Desktop\机器臂\pythonProject\text.py", line 33, in build_data_packet
raise ValueError("参数必须是整数类型") # 参数
ValueError: 参数必须是整数类型
错误中说在move_servos( 1,1, [1], [45]) 这句语句中的前两个参数不是整数,但这个明明就是整数,请求大佬帮我看看。