Adafruit HMC5883 Unified Library
Adafruit_HMC5883_U.h
Go to the documentation of this file.
1 
4 #ifndef __HMC5883_H__
5 #define __HMC5883_H__
6 
7 #if (ARDUINO >= 100)
8 #include "Arduino.h"
9 #else
10 #include "WProgram.h"
11 #endif
12 
13 #include <Adafruit_Sensor.h>
14 
15 #ifdef __AVR_ATtiny85__
16 #include "TinyWireM.h"
17 #define Wire TinyWireM
18 #else
19 #include <Wire.h>
20 #endif
21 
25 #define HMC5883_ADDRESS_MAG (0x3C >> 1) // 0011110x
26 
30 typedef enum {
31  HMC5883_REGISTER_MAG_CRA_REG_M = 0x00,
32  HMC5883_REGISTER_MAG_CRB_REG_M = 0x01,
33  HMC5883_REGISTER_MAG_MR_REG_M = 0x02,
34  HMC5883_REGISTER_MAG_OUT_X_H_M = 0x03,
35  HMC5883_REGISTER_MAG_OUT_X_L_M = 0x04,
36  HMC5883_REGISTER_MAG_OUT_Z_H_M = 0x05,
37  HMC5883_REGISTER_MAG_OUT_Z_L_M = 0x06,
38  HMC5883_REGISTER_MAG_OUT_Y_H_M = 0x07,
39  HMC5883_REGISTER_MAG_OUT_Y_L_M = 0x08,
40  HMC5883_REGISTER_MAG_SR_REG_Mg = 0x09,
41  HMC5883_REGISTER_MAG_IRA_REG_M = 0x0A,
42  HMC5883_REGISTER_MAG_IRB_REG_M = 0x0B,
43  HMC5883_REGISTER_MAG_IRC_REG_M = 0x0C,
44  HMC5883_REGISTER_MAG_TEMP_OUT_H_M = 0x31,
45  HMC5883_REGISTER_MAG_TEMP_OUT_L_M = 0x32
47 
51 typedef enum {
52  HMC5883_MAGGAIN_1_3 = 0x20, // +/- 1.3
53  HMC5883_MAGGAIN_1_9 = 0x40, // +/- 1.9
54  HMC5883_MAGGAIN_2_5 = 0x60, // +/- 2.5
55  HMC5883_MAGGAIN_4_0 = 0x80, // +/- 4.0
56  HMC5883_MAGGAIN_4_7 = 0xA0, // +/- 4.7
57  HMC5883_MAGGAIN_5_6 = 0xC0, // +/- 5.6
58  HMC5883_MAGGAIN_8_1 = 0xE0 // +/- 8.1
60 
64 typedef struct hmc5883MagData_s {
65  float x;
66  float y;
67  float z;
68  float orientation;
70 
74 #define HMC5883_ID (0b11010100)
75 
77 class Adafruit_HMC5883_Unified : public Adafruit_Sensor {
78 public:
82  Adafruit_HMC5883_Unified(int32_t sensorID = -1);
83 
84  bool begin(void);
85  void setMagGain(hmc5883MagGain gain);
86  bool
87  getEvent(sensors_event_t *);
88  void getSensor(sensor_t *);
89 
90 private:
91  hmc5883MagGain _magGain;
92  hmc5883MagData _magData; // Last read magnetometer data will be available here
93  int32_t _sensorID;
94 
95  void write8(byte address, byte reg, byte value);
96  byte read8(byte address, byte reg);
97  void read(void);
98 };
99 
100 #endif
struct hmc5883MagData_s hmc5883MagData
Internal magnetometer data type.
hmc5883MagRegisters_t
Registers.
Definition: Adafruit_HMC5883_U.h:30
hmc5883MagGain
Magnetometer gain settings.
Definition: Adafruit_HMC5883_U.h:51
Internal magnetometer data type.
Definition: Adafruit_HMC5883_U.h:64
Unified sensor driver for the magnetometer ///.
Definition: Adafruit_HMC5883_U.h:77
float orientation
Magnetometer orientation.
Definition: Adafruit_HMC5883_U.h:68
float y
Magnetometer y value.
Definition: Adafruit_HMC5883_U.h:66
float x
Magnetometer x value.
Definition: Adafruit_HMC5883_U.h:65
float z
Magnetometer z value.
Definition: Adafruit_HMC5883_U.h:67