ADXL345加速度计数据输出转换

时间:2016-07-02 22:56:24

标签: python accelerometer

我正在使用一个带有ATMEL ATmega128的Synapse无线模块。我已将ADXL345 3轴加速度计连接到它,我正在通过I2C与它通信。 Synapse模块使用python的一个子集作为脚本语言。

当我读取XYZ数据时,我得到一个6字节的数组。 EC FF EF FF 14 01

输出数据是二进制补码,DATAx0作为最低有效字节,DATAx1作为最高有效字节。因此,在上面的示例中,EC FF是x轴的输出。

我正在努力将其转化为G力量。数据表说在全分辨率模式下(我在),输出分辨率随g范围增加 由范围位设置以保持4 mg / LSB比例因子。

我尝试了以下内容:

x0 = ord(data[0])
x1 = ord(data[1])
raw = x0+(256*x1)

但是raw的价值没有任何意义。如何将这两个字节转换为有符号整数?

其他信息 当我打电话来阅读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是最重要的字节。这些是整数

我想我只是不理解二进制补码以及如何将这两个整数/字节组合成有符号整数。

1 个答案:

答案 0 :(得分:0)

我不确定您使用ord()做了什么...... ord(c)需要c个字符,并输出其ASCII字符代码。

无论哪种方式,要将表示为二进制补码的数字转换为Python中的有符号整数,就可以这样做:

def tc(val, bits):
    if val >= 2**(bits-1):
        return val - (2**bits)
    return val

>>> tc(0xECFF, 16)
-4865

虽然至于如何用你的数据实际调用该函数,我需要看看你的数据在Python中的样子。你希望看到G-force有哪些数字?

相关问题