我試圖確定一個數字是增加還是減少。編碼器返回一個無符號的 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
提交
取消