求助啊 为什么我的HMC5883L读出的原始数据中Y轴一直都是-4096
时间:10-02
整理:3721RD
点击:
这是串口打印的数据
x=-25y=-4096z=-645
x=-25y=-4096z=-645
x=-105y=-4096z=-603
x=-105y=-4096z=-603
x=-105y=-4096z=-603
x=-146y=-4096z=-576
x=-146y=-4096z=-576
x=-146y=-4096z=-576
x=-201y=-4096z=-532
x=-201y=-4096z=-532
x=-201y=-4096z=-532
x=-236y=-4096z=-514
x=-236y=-4096z=-514
x=-236y=-4096z=-514
x=-235y=-4096z=-459
x=-235y=-4096z=-459
x=-235y=-4096z=-459
x=-188y=-4096z=-444
x=-188y=-4096z=-444
x=-188y=-4096z=-444
x=-137y=-4096z=-476
x=-137y=-4096z=-476
这是hmc5883l代码
# include "hmc5883l.h"
//磁力计初始化
void HMC5883L_Init(void)
{
IIC_Init(); //初始化IIC
MCU_Write_Byte(HMC5883L_ADDR, 0x02, 0x00);
delay_ms(10);
}
//得到磁力计值(原始值)
//mx,my,mz:磁力计x,y,z轴的原始读数(带符号)
//返回值:0,成功
// 其他,错误代码
u8 HMC5883L_Get_Magnetic(short *mx, short *my, short *mz)
{
u8 buf[6], res;
res = MCU_Read_Len(HMC5883L_ADDR, 0x03, 6, buf);
if(res == 0)
{
*mx = ((u16)buf[0]<<8) | buf[1];
*my = ((u16)buf[2]<<8) | buf[3];
*mz = ((u16)buf[4]<<8) | buf[5];
}
return res;
}
求大神帮助啊
x=-25y=-4096z=-645
x=-25y=-4096z=-645
x=-105y=-4096z=-603
x=-105y=-4096z=-603
x=-105y=-4096z=-603
x=-146y=-4096z=-576
x=-146y=-4096z=-576
x=-146y=-4096z=-576
x=-201y=-4096z=-532
x=-201y=-4096z=-532
x=-201y=-4096z=-532
x=-236y=-4096z=-514
x=-236y=-4096z=-514
x=-236y=-4096z=-514
x=-235y=-4096z=-459
x=-235y=-4096z=-459
x=-235y=-4096z=-459
x=-188y=-4096z=-444
x=-188y=-4096z=-444
x=-188y=-4096z=-444
x=-137y=-4096z=-476
x=-137y=-4096z=-476
这是hmc5883l代码
# include "hmc5883l.h"
//磁力计初始化
void HMC5883L_Init(void)
{
IIC_Init(); //初始化IIC
MCU_Write_Byte(HMC5883L_ADDR, 0x02, 0x00);
delay_ms(10);
}
//得到磁力计值(原始值)
//mx,my,mz:磁力计x,y,z轴的原始读数(带符号)
//返回值:0,成功
// 其他,错误代码
u8 HMC5883L_Get_Magnetic(short *mx, short *my, short *mz)
{
u8 buf[6], res;
res = MCU_Read_Len(HMC5883L_ADDR, 0x03, 6, buf);
if(res == 0)
{
*mx = ((u16)buf[0]<<8) | buf[1];
*my = ((u16)buf[2]<<8) | buf[3];
*mz = ((u16)buf[4]<<8) | buf[5];
}
return res;
}
求大神帮助啊
因为你YZ轴数据读反了,所以Y轴数据一直不变。但是我的程序和你一样,为什么我读不出数据呢
数值4096说明试过载的表现。这块模块是靠磁力来感应的,如果你靠近磁铁太近的话就会造成过载。太靠近马达了。