极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9929|回复: 2

HMC5883L

[复制链接]
发表于 2014-3-4 14:55:32 | 显示全部楼层 |阅读模式
各位大神,有谁能帮我解释解释从HMC5883L中读出的数据是什么?感激不尽!!!
回复

使用道具 举报

发表于 2014-3-4 15:35:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 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);
    }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 01:38 , Processed in 0.035063 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表