c - 检测磁性编码器是否经过 360 度或 0 度以及哪个方向(翻转/环绕方向?) - C

标签 c encoder

我使用磁性编码器,它对手动输入使用react。转弯时,它会计算角度,并且该部分工作完美。这意味着如果我将编码器旋转 360 度,角度就会重置。 (因此又是 0)。但是,我想检测编码器是否已经通过 360 并返回到 0,或者是否从 0 回到 360。我需要知道编码器以 30 度为步长转动哪个方向。

所以: 我如何知道编码器是否按顺时针方向转动(从 0 -> 360 -> 0 -> 360 转动 fx.),还是按逆时针方向转动(从 360 转动 fx. -> 0 -> 360 -> 0)

现在,它将从 360 到 0 的步骤视为逆时针旋转,而实际上它是顺时针旋转...

有什么建议吗?

最佳答案

由于磁性编码器一次可以转动超过 180 度(尽管不太可能),因此从技术上讲不可能知道它转动的方向,因为例如。顺时针旋转 90 度也可能是逆时针旋转 270 度。

如果您的磁性编码器没有指示旋转方向,您能做的最好的就是猜测(例如,最短距离 - 即顺时针 90 度更有可能比逆时针 270 度),但您可能会有时会出错。

如果这是可以接受的,那么相对容易做到(假设整数角度在 0 到 360 之间):

int rotation_angle(int old_angle, int new_angle) {
  int result = (360 + new_angle - old_angle) % 360;
  return (result > 180) ? result - 360 : result;
}

然后:

printf("%d\n", rotation_angle(0, 330)); // prints : -30
printf("%d\n", rotation_angle(330, 0)); // prints : 30

关于c - 检测磁性编码器是否经过 360 度或 0 度以及哪个方向(翻转/环绕方向?) - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833008/

相关文章:

更改 3 字节整数的字节顺序

c - C 中 intBitsTofloat 中丢弃的精度值

在 C 中组合打印语句

将短数组的值复制到长数组

python - 使用 python 的数字到字母数字编码器(排列和正则表达式)

video - FFMPEG - bufsize 公式

submit - 没有为 fosUserBundle symfony2.1 帐户配置编码器

c - 动态重新分配 - 二维数组

java - BASE64Encoder 结果从 Windows 到 Unix 不同

python - 训练和测试集上的不同标签编码器值不好吗?