我试图确定一个数字是增加还是减少。编码器返回一个无符号的 16 位值,如果编码数据增加或减少,该值将增加、减少或保持不变。我每 x 秒获取编码值并将其附加到列表中,并且我试图比较这些值以查看它们是否在增加/减少。我将每个值与先前获得的值进行检查,但我遇到的唯一问题是在 65535 处,数据回绕到 0。我将如何解释这些实例?
2 回答

四季花海
TA贡献1811条经验 获得超5个赞
您需要确定读数之间数据可以增加的数量限制。然后检查是否已超过。例如,如果您的限制是 100,而之前的值是 65500,您需要检查新值是否在 655001-65535或0-65 范围内。
例如:
if new_val > old_val or \ new_val < (old_val + tolerance) % 65536:
...tolerance
您要识别的最大增加在哪里。

GCT1015
TA贡献1827条经验 获得超4个赞
令人难以置信的是,在两次测量之间,值的变化超过了其总范围的一半(如果确实如此,您无法确定它的移动方式),因此如果您得到的差异大于 32,768,请从中减去 65,536,如果您得到小于 -32,768 的差值加上 65,536。
这样,如果值从例如 65,535 变为 2(原始差异为 -65,533),您将注册为 +3(= -65,533 + 65,536)的差异,这就是您想要的。如果您以另一种方式越过环绕,则相同的过程会反过来发生。
添加回答
举报
0/150
提交
取消