反轴算法问题
Reversed axis algorithm issue
我目前正在开发一个电子项目,操纵杆值有点问题。这些值是"正确的",但看起来很奇怪。
操纵杆的经典轴通常工作(例如从左到右)。
- 总计:-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。
我不确定你的第二段代码是关于什么的。如果你能描述一下你在那里努力实现的目标,我可以提供进一步的见解。
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 到连接组件算法的问题(递归)
- 读取最后一行代码算法 - c++ 时出现问题
- 需要为 C++ 中的以下问题设计递归算法
- 我的C++语言蛮力算法有问题
- Coursera DSA 算法工具箱第 4 周第 2 个问题 - 分区纪念品
- 排序算法问题(购买商店物品)(崩溃)
- C++ 分而治之的算法问题
- 我对 std::unique(算法)C++有问题
- 对于这个问题,是否有更好的数据结构和算法选择
- 迭代快速排序方法的分区算法问题
- 这种快速排序算法有什么问题?
- 不确定我的排序算法出了什么问题
- 我的算法在 1D 数组中渲染矩形有什么问题
- 带有 std::vector 和 std::queue 的 Prim's 算法,我的代码有什么问题?
- 我的记忆动态规划算法有什么问题?
- 运行Dijkstra算法的问题
- 关于合并两个列表的算法的一些问题
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 分类算法和对象指针的问题