一、接线图
HMC5883L SCL ----- Arduino A5
HMC5883L SDA ----- Arduino A4
HMC5883L 正极 ----- Arduino 3.3V
HMC5883L 负极 ----- Arduino GND
二、Arduino读取代码
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compass;
void setup()
{
Serial.begin(9600);
Wire.begin();
compass = HMC5883L();
compass.SetScale(1.3);
compass.SetMeasurementMode(Measurement_Continuous);
}
void loop()
{
MagnetometerRaw raw = compass.ReadRawAxis();
MagnetometerScaled scaled = compass.ReadScaledAxis();
float xHeading = atan2(scaled.YAxis, scaled.XAxis);
float yHeading = atan2(scaled.ZAxis, scaled.XAxis);
float zHeading = atan2(scaled.ZAxis, scaled.YAxis);
if(xHeading < 0) xHeading += 2*PI;
if(xHeading > 2*PI) xHeading -= 2*PI;
if(yHeading < 0) yHeading += 2*PI;
if(yHeading > 2*PI) yHeading -= 2*PI;
if(zHeading < 0) zHeading += 2*PI;
if(zHeading > 2*PI) zHeading -= 2*PI;
float xDegrees = xHeading * 180/M_PI;
float yDegrees = yHeading * 180/M_PI;
float zDegrees = zHeading * 180/M_PI;
Serial.print("xDegrees");
Serial.print(xDegrees);
Serial.print(",");
Serial.print("yDegrees");
Serial.print(yDegrees);
Serial.print(",");
Serial.print("zDegrees");
Serial.print(zDegrees);
Serial.println(";");
Serial.println();
delay(2000);
}
三、细节Tips
- 需要先在Arduino中安装HMC5883L.zip包;
- 若Wire.h不能识别,是因为HMC5883L.h文件中Wire.h导入包的路径不对;
- 若Arduino版本低了,HMC5883L.cpp中需要进行修改,#include “WProgram.h” 改成 #include “Arduino.h”;
- 若HMC5883L.cpp不能进行数据读取,是引文#include “WProgram.h” 中采用旧的接口调用方式,均要将send and receive 方法进行替换为write、read方式。
四、成功读取数据
- 注意串口接收数据波特率为程序中设置的9600。