如何判断 16 位二进制编码值是增加还是减少
How to tell if a 16 bit-binary encoded value is increasing or decreasing
我正在尝试确定某个数字是在增加还是在减少。编码器返回一个无符号的 16 位值,如果编码数据增加或减少,该值将增加、减少或保持不变。
我获取编码值并每隔 x 秒将其附加到列表中,我正在尝试比较这些值以查看它们是否 increasing/decreasing。我将每个值与之前获得的值进行核对,但我遇到的唯一问题是在 65535 处,数据回绕到 0。我将如何解释这些实例?
您需要确定两次读数之间可以增加的数据量的限制。然后检查是否超过了。例如,如果您的限制是 100,而之前的值为 65500,则您需要检查新值是否在 655001-65535 或 0 - 65.[=12 范围内=]
例如:
if new_val > old_val or \
new_val < (old_val + tolerance) % 65536:
... 其中 tolerance
是您要识别的最大增量。
令人难以置信的是,该值在两次测量之间的变化幅度超过其总范围的一半(如果确实如此,您将无法弄清楚它向哪个方向移动),因此如果您得到的差异大于 32,768,请从中减去 65,536它,如果你得到的差异小于 -32,768,则添加 65,536。
那样的话,如果值来自例如65,535 比 2(-65,533 的原始差异),您将记录为 +3(= -65,533 + 65,536)的差异,这就是您想要的。如果您以另一种方式穿过环绕,则相同的过程会反向发生。
我正在尝试确定某个数字是在增加还是在减少。编码器返回一个无符号的 16 位值,如果编码数据增加或减少,该值将增加、减少或保持不变。
我获取编码值并每隔 x 秒将其附加到列表中,我正在尝试比较这些值以查看它们是否 increasing/decreasing。我将每个值与之前获得的值进行核对,但我遇到的唯一问题是在 65535 处,数据回绕到 0。我将如何解释这些实例?
您需要确定两次读数之间可以增加的数据量的限制。然后检查是否超过了。例如,如果您的限制是 100,而之前的值为 65500,则您需要检查新值是否在 655001-65535 或 0 - 65.[=12 范围内=]
例如:
if new_val > old_val or \
new_val < (old_val + tolerance) % 65536:
... 其中 tolerance
是您要识别的最大增量。
令人难以置信的是,该值在两次测量之间的变化幅度超过其总范围的一半(如果确实如此,您将无法弄清楚它向哪个方向移动),因此如果您得到的差异大于 32,768,请从中减去 65,536它,如果你得到的差异小于 -32,768,则添加 65,536。
那样的话,如果值来自例如65,535 比 2(-65,533 的原始差异),您将记录为 +3(= -65,533 + 65,536)的差异,这就是您想要的。如果您以另一种方式穿过环绕,则相同的过程会反向发生。