如何增加 HID 轴的范围? (方向盘在几度后达到极限)
How could I increase the range of an HID axis? (steering wheel hits limit after a few degrees)
我有一个编码器,每转 4300 个增量。而且我至少需要在任一方向转 3 圈。 (用于方向盘)
然而,当我稍微转动它时,它已经触及极值。这是顺时针旋转几度后:
这是我的描述:
我的代码:
while (1)
{
steer.direction = position - position_p;
position_p = position;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, &steer, sizeof(steer));
HAL_Delay(5);
}
我试过使用绝对值。对于 8 位,它会在几度后溢出并返回到相反的极值。也许 16 位可以解决这个问题,但我无法让它以这种方式工作。
我设法使用了 16 位绝对位置。
我认为它不起作用,因为“发送”功能只采用 8 位值。
所以我将 16 位变量拆分为 2x8 位数组。 (我正在使用 cubeIDE)
steer.direction[0] = position & 0x00FF;
steer.direction[1] = position >> 8;
我有一个编码器,每转 4300 个增量。而且我至少需要在任一方向转 3 圈。 (用于方向盘) 然而,当我稍微转动它时,它已经触及极值。这是顺时针旋转几度后:
这是我的描述:
我的代码:
while (1)
{
steer.direction = position - position_p;
position_p = position;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, &steer, sizeof(steer));
HAL_Delay(5);
}
我试过使用绝对值。对于 8 位,它会在几度后溢出并返回到相反的极值。也许 16 位可以解决这个问题,但我无法让它以这种方式工作。
我设法使用了 16 位绝对位置。 我认为它不起作用,因为“发送”功能只采用 8 位值。 所以我将 16 位变量拆分为 2x8 位数组。 (我正在使用 cubeIDE)
steer.direction[0] = position & 0x00FF;
steer.direction[1] = position >> 8;