我目前正在研究电子项目,操纵杆值存在一些问题。值是“正确的”但它们看起来很奇怪。
来自操纵杆的经典轴通常起作用(例如从左到右)。
但这是我从这个中读到的内容:
目前我正在使用以下解决方法从-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 ;
}
你有什么想法或好算法吗?我开始变得疯狂,我完全厌恶二元操作...:'(
答案 0 :(得分:4)
看起来无论采样机制是什么,操纵杆实际上返回0 ... 255范围内的无符号字节,最左边为0,最右边为255。
您可以使用以下语句将该值转换为-128到127的范围:
value = (value & 0xFF) - 128;
如果value
是字节变量,您可以将其缩短为:
value ^= 0x80;
任何处理器上的转换应该非常快,即使是1MHz 6502。
我不确定你的第二部分代码是什么。如果你能描述你想要在那里完成什么,我可以提供进一步的见解。