• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: HMC5883L  Arduino  

资源简介

HMC5883L三轴电子罗盘的Arduino库

资源截图

代码片段和文件信息

/*
HMC5883L.cpp - Class file for the HMC5883L Triple Axis Magnetometer Arduino Library.
Copyright (C) 2011 Love Electronics (loveelectronics.co.uk)

This program is free software: you can redistribute it and/or modify
it under the terms of the version 3 GNU General Public License as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not see .

 WARNING: THE HMC5883L IS NOT IDENTICAL TO THE HMC5883!
 Datasheet for HMC5883L:
 http://www51.honeywell.com/aero/common/documents/myaerospacecatalog-documents/Defense_Brochures-documents/HMC5883L_3-Axis_Digital_Compass_IC.pdf

*/

#include  
#include “HMC5883L.h“

HMC5883L::HMC5883L()
{
  m_Scale = 1;
}

MagnetometerRaw HMC5883L::ReadRawAxis()
{
  uint8_t* buffer = Read(DataRegisterBegin 6);
  MagnetometerRaw raw = MagnetometerRaw();
  raw.XAxis = (buffer[0] << 8) | buffer[1];
  raw.ZAxis = (buffer[2] << 8) | buffer[3];
  raw.YAxis = (buffer[4] << 8) | buffer[5];
  return raw;
}

MagnetometerScaled HMC5883L::ReadScaledAxis()
{
  MagnetometerRaw raw = ReadRawAxis();
  MagnetometerScaled scaled = MagnetometerScaled();
  scaled.XAxis = raw.XAxis * m_Scale;
  scaled.ZAxis = raw.ZAxis * m_Scale;
  scaled.YAxis = raw.YAxis * m_Scale;
  return scaled;
}

int HMC5883L::SetScale(float gauss)
{
uint8_t regValue = 0x00;
if(gauss == 0.88)
{
regValue = 0x00;
m_Scale = 0.73;
}
else if(gauss == 1.3)
{
regValue = 0x01;
m_Scale = 0.92;
}
else if(gauss == 1.9)
{
regValue = 0x02;
m_Scale = 1.22;
}
else if(gauss == 2.5)
{
regValue = 0x03;
m_Scale = 1.52;
}
else if(gauss == 4.0)
{
regValue = 0x04;
m_Scale = 2.27;
}
else if(gauss == 4.7)
{
regValue = 0x05;
m_Scale = 2.56;
}
else if(gauss == 5.6)
{
regValue = 0x06;
m_Scale = 3.03;
}
else if(gauss == 8.1)
{
regValue = 0x07;
m_Scale = 4.35;
}
else
return ErrorCode_1_Num;

// Setting is in the top 3 bits of the register.
regValue = regValue << 5;
Write(ConfigurationRegisterB regValue);
}

int HMC5883L::SetMeasurementMode(uint8_t mode)
{
Write(ModeRegister mode);
}

void HMC5883L::Write(int address int data)
{
  Wire.beginTransmission(HMC5883L_Address);
  Wire.send(address);
  Wire.send(data);
  Wire.endTransmission();
}

uint8_t* HMC5883L::Read(int address int length)
{
  Wire.beginTransmission(HMC5883L_Address);
  Wire.send(address);
  Wire.endTransmission();
  
  Wire.beginTransmission(HMC5883L_Address);
  Wire.requestFrom(HMC5883L_Address length);

  uint8_t buffer[length];
  if(Wire.available() == length)
  {
  for(uint8_t i

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1032  2011-09-10 20:46  HMC5883L\HHMC5883L_Example_Ansifa\HHMC5883L_Example_Ansifa.pde

     文件       3259  2011-07-12 17:21  HMC5883L\HMC5883L.cpp

     文件       1999  2011-07-12 17:21  HMC5883L\HMC5883L.h

     文件       4217  2011-07-12 17:55  HMC5883L\HMC5883L_Example\HMC5883L_Example.pde

     文件        741  2011-07-12 16:11  HMC5883L\keywords.txt

     目录          0  2012-01-09 10:31  HMC5883L\HHMC5883L_Example_Ansifa

     目录          0  2012-01-09 10:31  HMC5883L\HMC5883L_Example

     目录          0  2012-01-09 10:31  HMC5883L

----------- ---------  ---------- -----  ----

                11248                    8


评论

共有 条评论