我正在編程我的Arduino微控制器,並且發現了一些用於接受加速度計傳感器數據供以後使用的代碼。除了下面的代碼我可以理解我想對發生的事情有一些直覺,但畢竟我的搜索和閱讀我無法將自己的頭圍繞在正在發生的事情上,並真正理解。加速度計代碼中的位移操作
我已經參加了C++課程,並且我們在按位操作或位移或任何您想調用的操作方面做得很少。讓我試着解釋我認爲我理解的內容,並且可以在需要的地方糾正我。
所以:
- 我認爲我們存儲X的值,其實相當肯定。
- 看來數組「buff」(槽號1)中的數據被設置爲整數的數據類型。
- 在時隙1的值被移位一位8位到左側。(這是否指向拋光輪時隙0?)
該新值被比較,以拋光輪時隙0,並且如果任一數據位是真的,那麼存儲在x中的數據中的位也將爲真,因此,在最終存儲值中0和1 = 1,0和0 = 0且1和0 = 1。
該代碼對所有三個軸都執行此操作:x,y,z但我不知道爲什麼......我需要幫助。在我進步之前,我想充分理解。
//each axis reading comes in 10 bit resolution, ie 2 bytes.
// Least Significant Byte first!!
//thus we are converting both bytes in to one int
x = (((int)buff[1]) << 8) | buff[0];
y = (((int)buff[3]) << 8) | buff[2];
z = (((int)buff[5]) << 8) | buff[4];
謝謝!我花了幾天的時間閱讀這些東西,而你和其他社區在不到15分鐘的時間裏爲我帶來了我的尤里卡時刻!你一步一步的解釋使得它更容易理解! – user2701295
輸入數據(buff)也是二進制補碼,看起來Arduino微處理器在將位分配給我的版本中的'x'' y'' z'時會保持符號。這很混亂。 – mrmagooey
@mrmagooey,你爲什麼不想保持這個標誌? –