0

我正在努力解决 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)
4

0 回答 0