反转轴算法问题

时间:2013-12-07 01:04:36

标签: c++ c algorithm binary

我目前正在研究电子项目,操纵杆值存在一些问题。值是“正确的”但它们看起来很奇怪。

来自操纵杆的经典轴通常起作用(例如从左到右)。

  • 完全离开:-128
  • 中心:0
  • 完全离开:+128

但这是我从这个中读到的内容:

  • 完全离开:-0
  • 略微左侧: - 128
  • 中心:“随机”(从未完全归零,在-125和+125之间漂浮)
  • 略微右侧:+ 128
  • 完全正确:+0

目前我正在使用以下解决方法从-128到+128获得线性进展:

if (value > 0)
    value = -(128 - value);
else
    test = 128 + value;

问题是我必须在几个输入上执行此操作,每个joyrstick 2轴,每个设备3个操纵杆,4个总设备,所以24次,我需要在整个操作中保持20ms以下的响应时间。这就是一个疯狂的循环消耗!

我可以二进制操作该值。 这就是我实际中心的方式。原始转储包含从控制器I / O读取的0和1数组

for (i = 0; i<8; i++) {
    value |= raw_dump[pos + i] ? (0x80 >> i):0 ;
}

你有什么想法或好算法吗?我开始变得疯狂,我完全厌恶二元操作...:'(

1 个答案:

答案 0 :(得分:4)

看起来无论采样机制是什么,操纵杆实际上返回0 ... 255范围内的无符号字节,最左边为0,最右边为255。

您可以使用以下语句将该值转换为-128到127的范围:

value = (value & 0xFF) - 128;

如果value是字节变量,您可以将其缩短为:

value ^= 0x80;

任何处理器上的转换应该非常快,即使是1MHz 6502。

我不确定你的第二部分代码是什么。如果你能描述你想要在那里完成什么,我可以提供进一步的见解。