我正在使用C++和Qt编程Raspberry Pi 3。我正在使用wiringPi库与I2C加速度计进行接口交互(我用它来比较倾斜角度值但不测量角度度数)。
我需要确定一个加速度计读数是否大于或小于先前的读数或任意预设值。(我有一个机器上的臂,我想将其设置为任意角度,然后让臂移动到该角度并从该角度移动。)
加速度计输出两个字节的二进制补码数据。数据左对齐12位。(我认为这意味着加速度计值的4个最高有效位位于上字节的左侧?)加速度计是LIS3DH。
我将两个字节读取到我的程序中作为2个整数值,但我在将数据转换为有用信息方面遇到了困难。
wiringPi I2C库仅返回整数。
我可能需要将十进制读数转换为二进制,将两个字节的二进制补码左对齐数据转换为右对齐的12位常规二进制数据。
我正在寻找如何完成此操作以及是否有比我上面列出的路径更简单的方法的建议。
我需要确定一个加速度计读数是否大于或小于先前的读数或任意预设值。(我有一个机器上的臂,我想将其设置为任意角度,然后让臂移动到该角度并从该角度移动。)
加速度计输出两个字节的二进制补码数据。数据左对齐12位。(我认为这意味着加速度计值的4个最高有效位位于上字节的左侧?)加速度计是LIS3DH。
我将两个字节读取到我的程序中作为2个整数值,但我在将数据转换为有用信息方面遇到了困难。
wiringPi I2C库仅返回整数。
我可能需要将十进制读数转换为二进制,将两个字节的二进制补码左对齐数据转换为右对齐的12位常规二进制数据。
我正在寻找如何完成此操作以及是否有比我上面列出的路径更简单的方法的建议。
编辑:
void main(void)
{
int acc_l = 0, acc_h = 0;
acc_l = read_output_register_lo;
acc_h = read_output_register_hi;
/*
How do I convert acc_l and acc_h to binary?
Do I need to shift acc_h 4 bits to the right?
How do I concatenate acc_h and acc_l into a 12 bit binary number?
How do I convert 12 bit twos compliment binary into regular binary?
Is this the correct process to follow?
Is there an easier way to do this?
*/
}
编辑: 非常感谢Roman。我想到了同样的基本概念,但似乎我把两个寄存器反了。再次感谢。