gpt4 book ai didi

Python-如何将 struct.pack 值添加到将通过串行端口发送的整数

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:59 24 4
gpt4 key购买 nike

我是 python 的新手,最近我提出了一个类似的问题,关于如何将十进制值转换为整数,先低字节,然后高字节是 here并解决了,但现在我遇到了一个问题,因为我希望 python 从 raw_input 中获取一个十进制值,将其转换为一个整数,先是低字节,然后是高字节,然后将其插入一个 16 位整数以将其发送到串口到伺服 Controller (devantech sd84)。我将 raw_input 包含在一个值中,然后将 struc.pack 包含在其他值中,然后我将第二个值放入 16 位整数中,但在此之前 python 会返回此错误:

    Traceback (most recent call last):
File "C:/Users/Pablo/Desktop/kdfkldkfgv", line 28, in <module>
POS_SERVO = struct.pack('<h', 'posicion')
error: cannot convert argument to integer

完整代码如下:

    # -*- coding: utf-8 -*-
import serial
import time
import struct
# Para cambiar de Sistema Operativo cambiar puerto
#en la siguiente línea: Win COM# linux /dev/ttyS# /dev/ttyUSB#
# #=un número asignado por tu sistema.
port='COM3'
sync='\xAA\xA0\x55'
SET_SERVO='\x01'
GET_SERVO='\x02'
SET_SPEED='\x03'
SET_MODE='\x04'
GET_MODE='\x05'
SET_AD_CNT='\x06' #Controla el número de canales analógicos.
GET_AD_CNT='\x07' #Devuelve el número de canales analógicos actuales.
GET_INPUT='\X08' # Devuelve el estado de una entrada.
GET_ADC='\X09' #Devuelve el valor de un canal analógico.
GET_VERSION='\x0A' #Devuelve la versión del procesador seleccionado.
GET_BULK='\x15' #Usado para test en fábriica.
TEST='\X16' #Usado para test en fábrica.
ser = serial.Serial(port, baudrate=115200, bytesize=8, parity='N', stopbits=2,timeout=1)

if ser.isOpen():
print "Estado del puerto: Correcto."
print "Procedo a enviar modo del canal 1 y posiciones del mismo."
posicion = raw_input('Inserta un numero entre 400 y 2200:')
POS_SERVO = struct.pack('<h', 'posicion')
ser.write(sync+SET_MODE+'\x01\x01\x19')
ser.write(sync+SET_SERVO+'\x01\x02'+POS_SERVO)
time.sleep(1.6)
ser.close
print "Todo el proceso completado correctamente."

else:
print "El puertito está cerrado"

print "Hasta Luego :D"

为了拥有相同 Controller 的人的利益,我将解释 16 位整数前三个字节是同步的 (\xAA\xA0\x55) 然后是命令类型 SET_SERVO (position) (\x01) 然后是1 的 channel 1-84 是 (\x01) 然后是字节计数,在这种情况下是 2 (\x02) 和伺服位置低字节,然后是高字节 (POS_SERVO)(例如 1500\xDC\x05)

我不知道如何解决它,因为它不是一个参数,实际上它是一个值,我不知道如何告诉 python。

最佳答案

你正在传递一个字符串文字;您应该传递一个值,使用裸名表示。但是您需要先将其转换为整数,然后才能对其进行处理。

POS_SERVO = struct.pack('<h', int(posicion))

不过,您应该考虑验证输入,以确保它是正确的类型并在所需范围内。

关于Python-如何将 struct.pack 值添加到将通过串行端口发送的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12023401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com