你好,我是使用Python是一个新手,但我很感兴趣的是2年。 我要让机器人,我尝试使用Python和pyserial
在搅拌器。 但是我发现一个问题,2小时寻找在谷歌的答案,在这个网站后,我发现,也许我是智障,因为我解决不了。 我想是不是问呢。
我使用的是devantech sd84伺服控制器,并通过USB端口controling它串行设备,所以我用pyserial
。 问题是,我想Python来采取十进制值FOM之间的用户输入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')
对于谁具有相同的CONTROLER人民的利益,我会explane是16位整数前三字节是同步(\xAA\xA0\x55)
那么该命令SET_SERVO(位置)(\ X01)则信道1-84为类型图1是(\ X01)然后在这种情况下2字节计数(\ X02)和所述伺服位置低字节,然后将高字节(\ XDC \ X05),其现在我在我的iPod计算与一个应用程序,然后我插入手动哈哈哈我想停止这蒙山愚蠢的事情,让他compuer为我做的。
现在,我会后我用于测试目的做了一个代码它mades通道1去troug伺服它的全系列ATA在西班牙不同的速度和打印有趣的事情,而伺服“共舞”我手动计算的positons并插入他们哈哈哈听起来像历史为了我。
# -*- 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"