gpt4 book ai didi

Python - 十进制到整数低字节然后高字节

转载 作者:行者123 更新时间:2023-11-28 20:26:22 25 4
gpt4 key购买 nike

你好,我是 Python 的新手,但我已经对它感兴趣了 2 年。我想制作机器人,我正在尝试在 blender 上将 Python 与 pyserial 结合使用。但是我发现了一个问题,在谷歌和这个网站上寻找答案 2 小时后,我发现我可能是弱智,因为我无法解决它。我认为还没有被问到。

我正在使用 devantech sd84 伺服 Controller 并通过串行设备的 USB 端口控制它,所以我使用 pyserial。问题是我希望 Python 从 400-2200 之间的用户输入中获取十进制值,我知道该怎么做,但我需要 Python 将其显示为两个字节,先发送低字节,再发送高字节。例如(伪代码,因为我还不知道如何编程):

    #ask for a decimal number between a range (the range does not really matters)
x = raw_input('\tInsert a number between 400-2200:') #Insert a number between 400-2200: 1500
#show it as hex
hex(x) #5dc
#put it in two bytes and in this case add a zero(?) I don't know how to do that.
0xDC 0x05
#add it to a 16-bit integer to send it to the servo controller via the virtual serial port(?) i also don't know how to do that.
ser.write('\xAA\xA0\x55\x01\x01\x02\xDC\x05')

为了拥有相同 Controller 的人的兴趣,我将解释 16 位整数前三个字节是同步 (\xAA\xA0\x55) 然后是命令类型 SET_SERVO(位置)(\x01) 然后 1 的 channel 1-84 是 (\x01) 然后是字节计数在这种情况下 2 (\x02) 和伺服位置低字节然后是高字节 (\xDC\x05) 现在我用在我的 iPod 中用一个应用程序然后我手动插入哈哈哈我想停止那个愚蠢的事情并让他为我做这件事。

现在我将发布一个我为测试目的而制作的代码,它使 channel 1 中的伺服以不同的速度进入全范围,并在伺服“跳舞”时用西类牙语打印有趣的东西我手动计算位置并将它们插入哈哈哈对我来说听起来像是历史。

    # -*- coding: utf-8 -*-
#Pablo P. 2012 "bailecillo"
#mueve un servo en el canal 1 a través de todo su recorido e imprime frases mientras dicho servo "baila"
import serial
import time
# 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)

print "Hola! me alegro de verte."
time.sleep(2)

if ser.isOpen():
print "Estado del puerto: Correcto."
time.sleep(1)
print "Procedo a enviar modo del canal 1 y posicion(es) del mismo."
time.sleep(3)
print "Comprobando sistemas de baile..."
ser.write(sync+SET_MODE+'\x01\x01\x19')
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(1)
ser.write(sync+SET_SPEED+'\x01\x01\x10')
ser.write(sync+SET_SERVO+'\x01\x02\x78\x05') #centro
time.sleep(2)
print "Vamos a bailar!"
time.sleep(2)
print "preparados..."
time.sleep(1)
print "listos..."
time.sleep(1)
print "Yaaaa!!"
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x98\x08') #izda
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x90\x01') #derecha
time.sleep(3)
ser.write(sync+SET_SERVO+'\x01\x02\x78\x05') #centro
time.sleep(3)
ser.write(sync+SET_SPEED+'\x01\x01\x00')
ser.close()
time.sleep(1)
print "Todo el proceso completado correctamente."

else:
print "El puertito está cerrado"

print "Hasta Luego :D"

最佳答案

这就是为什么新接触 Python 的程序员应该查看 libref .

>>> struct.pack('<h', 1500)
'\xdc\x05'

关于Python - 十进制到整数低字节然后高字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020573/

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