我正在使用一個具有ATMEL ATmega128的Synapse無線模塊。我已經將ADXL345 3軸加速度計連接到它,並且通過I2C與它進行通信。 Synapse模塊使用python的一個子集作爲腳本語言。ADXL345加速度計數據輸出轉換
當我讀取XYZ數據時,我得到一個6字節的數組。 EC FF EF FF 01 01
輸出數據與DATAx0作爲最低有效字節和DATAx1作爲最高有效字節進行二進制補碼。所以在上面的例子中,EC FF是x軸的輸出。
我正在努力如何將其轉換爲G力。數據表在全分辨率模式下(我所在的位置)輸出分辨率隨範圍位設置的g範圍 增加,以保持4 mg/LSB比例因子。
我已經試過如下:
x0 = ord(data[0])
x1 = ord(data[1])
raw = x0+(256*x1)
,但原料的價值沒有任何意義。如何將這兩個字節轉換爲有符號整數?
其他信息 當我打這個電話來讀取ADXL345:
data = readAdxls(6)
它返回的字節串讀取來自外部I2C器件回來。
Xlsb = data[0] # EC - 236
Xmsb = data[1] # FF - 255
Ylsb = data[2] # EF - 239
Ymsb = data[3] # FF - 255
Zlsb = data[4] # 14 - 20
Zmsb = data[5] # 01 - 1
所以XLSB是最顯著字節和Xmsb是最顯著字節。這些是整數
我想我只是不明白二進制補碼,以及如何將這兩個整數/字節組合成一個有符號的整數。
這個子集有多完整?你可以使用'struct'模塊嗎? – MaxNoe
不,結構模塊不是該語言的一部分。 FWIW,也不支持浮動。它的設計非常輕便。 – cce1911
對不起,但如果兩個字節是EC和FF,是第二個最重要的,正確的順序是FF EC。 因此,要轉換您只需: (大多數<< 8 |最少) 這會給你原始數據,然後乘以選擇傳感器分辨率。 如果你去的最高分辨率,只需乘以0.0039 – Lornioiz