我正在努力解决 Python 和 Firmata 的问题,因为它需要将 32 位长转换为 7 位(midi 风格)整数数组。我有 2 个变体,没有工作,看起来这两个函数都发送“位置”的垃圾值。电机启动并无限期地继续旋转,不需要步数。其他不需要此功能的功能就可以了。如何解决这个问题?提前致谢。
从文档:
Stepper to (absolute move)
Moves a stepper to a desired position based on the number of steps from the zero position.
The position is specified as a 32-bit signed long.
0 START_SYSEX (0xF0)
1 ACCELSTEPPER_DATA (0x62)
2 to command (0x03)
3 device number (0-9)
4 position, bits 0-6
5 position, bits 7-13
6 position, bits 14-20
7 position, bits 21-27
8 position, bits 28-32
9 END_SYSEX (0xF7)
版本 1
def accStepFmt_MoveTo(brd, dev_no, pos):
cmd = bytearray([acc.ACCELSTEPPER_TO, dev_no])
pos7bit = encode7bit(pos)
cmd.extend(pos7bit)
brd.send_sysex(acc.ACCELSTEPPER_DATA, cmd)
def encode7bit(v):
values = [v & 127]
v >>= 7
while v:
values.insert(0, v & 127 | 128)
v >>= 7
return values
版本 2
def accStepFmt_MoveTo(brd, dev_no, pos):
s = bin(pos)[2:].zfill(32)
cmd = bytearray([acc.ACCELSTEPPER_TO, dev_no,
int(s[0:6], 2), int(s[7:13], 2), int(s[14:20], 2),
int(s[21:27], 2), int(s[28:32], 2)])
brd.send_sysex(acc.ACCELSTEPPER_DATA, cmd)