泪落尘间 发表于 2014-3-4 14:55:32

HMC5883L

各位大神,有谁能帮我解释解释从HMC5883L中读出的数据是什么?感激不尽!!!

bh7jec 发表于 2014-3-4 15:35:38

http://www.geek-workshop.com/thread-105-1-1.html

水涌沧 发表于 2014-3-20 21:57:30

#include <Wire.h>
#define congji 0x1E//HMC5883地址
#define peiA 0x00//数据输出速率和测量配置寄存器地址
#define peiB 0x01//装置增益配置寄存器地址
#define moshi 0x02 //操作模式寄存器地址
#define X_MSB 0x03 //X 的高位数据地址
#define X_LSB 0x04 //X 的低位数据地址
#define Y_MSB 0x07 //Y 的高位数据地址
#define Y_LSB 0x08 //Y 的低位数据地址
#define Z_MSB 0x05 //Z 的高位数据地址
#define Z_LSB 0x06 //Z 的低位数据地址
#define zhuangtai 0x09 //装置状态寄存器地址
#define shibie_A 0x0A //识别寄存器A地址
#define shibie_B 0x0B //识别寄存器B地址
#define shibie_C 0x0C //识别寄存器C地址

int g1;
int g2;

//                     写数据

void writeRegister(int deviceAddress, byte address, byte val)//对装置(HMC5883,地址为congji)的对应地址(所有可写的寄存器地址)进行写数据
{
Wire.beginTransmission(deviceAddress);    //向HMC5883(地址为congji)申请操作
Wire.write(byte(address));    //向HMC5853发送所要操作的地址
Wire.write(val);      //对你所申请的地址进行写数据
Wire.endTransmission();    //解除申请
}
//           读数据

int readRegister(int deviceAddress, byte address)
{int g;
Wire.beginTransmission(deviceAddress);    //向HMC5883(地址为congji)申请操作
Wire.write(byte(address));   //向HMC5853发送所要操作的地址      
Wire.endTransmission();   //解除申请

Wire.beginTransmission(deviceAddress);      //向HMC5883(地址为congji)申请操作
Wire.requestFrom(deviceAddress,1);      //向HMC5853申请要操作的数据字节数
while(Wire.available())   
{g= Wire.read();   //读你所申请的数据
}
Wire.endTransmission();      //解除申请
return(g);      //返回读取的数据
}


void setup()
{
Wire.begin();      // 初始化,加入I2C总线
Serial.begin(9600);      // 初始化串口输出
   writeRegister(congji,moshi,0x00);   //配置工作模式
}
void loop()
{int g;
   //读X的值
g1=readRegister(congji,X_MSB);   //读X高八位的数值
g2= readRegister(congji,X_LSB);   //读X低八位的数值
Serial.print("X_LSB=");
g=g1<<8|g2;    //对高低位数据进行处理,这步处理我是看别人写的,我不会,数据应该要处理吧!
   Serial.print(g);    //发送X的值
   delay(500);
   
//读Y值
   g1= readRegister(congji,Y_MSB);
g2=readRegister(congji,Y_LSB);
Serial.print("Y_LSB=");
g=g1<<8|g2;
   Serial.print(g);
   delay(500);
   
//读Z值
g1= readRegister(congji,Z_MSB);
g2=readRegister(congji,Z_LSB);
Serial.print("Z_LSB=");
g=g1<<8|g2;
   Serial.println(g);
   delay(500);
    }
页: [1]
查看完整版本: HMC5883L