我看了正点原子的那个参考代码: 但是我的是這样的代码:
[mw_shl_code=c,true]void ADXL345_AUTO_Adjust(void)
{
int i;
int offx = 0, offy = 0, offz = 0;
Single_Write(ADXL345_Addr,0x2D,0x00);
Delayms(100);
Single_Write(ADXL345_Addr,0x30,0x0B);
Single_Write(ADXL345_Addr,0x2C,0x0A);
Single_Write(ADXL345_Addr,0x2D,0x28);
Single_Write(ADXL345_Addr,0x1E,0x00);
Single_Write(ADXL345_Addr,0x1F,0x00);
Single_Write(ADXL345_Addr,0x20,0x00);
Delayms(12);
for(i = 0; i < 10; i++)
{
read_ADXL345_Avval();
//Send_ADXL345_rawdata();
offx +=A_X; offy += A_Y; offz += A_Z;
}
offx /= 10; offy /= 10; offz /=10;
A_X = -offx/4;
A_Y = -offy/4;
A_Z = -(offz - 256)/4;
//Send_ADXL345_rawdata();
Single_Write(ADXL345_Addr,0x1E,A_X);
Single_Write(ADXL345_Addr,0x1F,A_Y);
Single_Write(ADXL345_Addr,0x20,A_Z);
}[/mw_shl_code]
可以看到我在上面写了两个
[mw_shl_code=c,true]Send_ADXL345_rawdata();但是上面的代码中目前都注释了, 第一个写在那个for(i=0;i<10;..)那个循环里头, 打印出x,y,z的测量值均为5000+, 這样因为我的offx ...为int型,如果连续加10次, offx肯定超过了int的最大值,所以后面那个
[mw_shl_code=c,true]Send_ADXL345_rawdata();打印出来的A_X, A_Y,... 就会是乱码, [/mw_shl_code]
[mw_shl_code=c,true]为什么我的陀螺测出的数据有5000+这么大呢? [/mw_shl_code]
[mw_shl_code=c,true]A_X, A_Y,A_Z 是我声明的读取adxl345的测量的值的全局变量[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[/mw_shl_code] |