反轴算法问题

Reversed axis algorithm issue

本文关键字:问题 算法      更新时间:2023-10-16

我目前正在开发一个电子项目,操纵杆值有点问题。这些值是"正确的",但看起来很奇怪。

操纵杆的经典轴通常工作(例如从左到右)。

  • 总计:-128
  • 中心:0
  • 总计左侧:+128

但以下是我从这篇文章中读到的内容:

  • 总共剩下:-0
  • 略偏左:-128
  • 中心:"随机"(从不完全归零,浮动在-125和+125之间)
  • 稍右:+128
  • 完全正确:+0

目前,我正在使用以下变通方法来获得从-128到+128的线性级数:

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

问题是,我必须在几个输入上这样做,每个操纵杆2个轴,每个设备3个操纵杆,总共4个设备,所以24次,我需要在整个操作中保持20ms以下的响应时间。这简直是消耗周期!

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

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

你有什么想法或好的算法吗?我开始被亵渎了,我完全不喜欢二进制操作…:(

看起来,无论采用何种机制采样,操纵杆实际上都会返回一个范围为0的无符号字节。。255,在最左边为0,在最右边为255。

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

value = (value & 0xFF) - 128;

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

value ^= 0x80;

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

我不确定你的第二段代码是关于什么的。如果你能描述一下你在那里努力实现的目标,我可以提供进一步的见解。