Adafruit LSM303DLH Magnetometer Library
Adafruit_LSM303DLH_Mag.h
Go to the documentation of this file.
1 
6 #ifndef LSM303DLH_MAG_H
7 #define LSM303DLH_MAG_H
8 
9 #if (ARDUINO >= 100)
10 #include "Arduino.h"
11 #else
12 #include "WProgram.h"
13 #endif
14 #include <Adafruit_BusIO_Register.h>
15 #include <Adafruit_I2CDevice.h>
16 #include <Adafruit_Sensor.h>
17 #include <Wire.h>
18 
22 #define _ADDRESS_MAG 0x1E
23 
27 typedef enum {
28  LSM303_REGISTER_MAG_CRA_REG_M = 0x00,
29  LSM303_REGISTER_MAG_CRB_REG_M = 0x01,
30  LSM303_REGISTER_MAG_MR_REG_M = 0x02,
31  LSM303_REGISTER_MAG_OUT_X_H_M = 0x03,
32  LSM303_REGISTER_MAG_OUT_X_L_M = 0x04,
33  LSM303_REGISTER_MAG_OUT_Z_H_M = 0x05,
34  LSM303_REGISTER_MAG_OUT_Z_L_M = 0x06,
35  LSM303_REGISTER_MAG_OUT_Y_H_M = 0x07,
36  LSM303_REGISTER_MAG_OUT_Y_L_M = 0x08,
37  LSM303_REGISTER_MAG_SR_REG_Mg = 0x09,
38  LSM303_REGISTER_MAG_IRA_REG_M = 0x0A,
39  LSM303_REGISTER_MAG_IRB_REG_M = 0x0B,
40  LSM303_REGISTER_MAG_IRC_REG_M = 0x0C,
41  LSM303_REGISTER_MAG_TEMP_OUT_H_M = 0x31,
42  LSM303_REGISTER_MAG_TEMP_OUT_L_M = 0x32
44 /*=========================================================================*/
45 
49 typedef enum {
50  LSM303_MAGGAIN_1_3, // +/- 1.3
51  LSM303_MAGGAIN_1_9, // +/- 1.9
52  LSM303_MAGGAIN_2_5, // +/- 2.5
53  LSM303_MAGGAIN_4_0, // +/- 4.0
54  LSM303_MAGGAIN_4_7, // +/- 4.7
55  LSM303_MAGGAIN_5_6, // +/- 5.6
56  LSM303_MAGGAIN_8_1 // +/- 8.1
58 /*=========================================================================*/
59 
63 typedef enum {
64  LSM303_MAGRATE_0_7, // 0.75 Hz
65  LSM303_MAGRATE_1_5, // 1.5 Hz
66  LSM303_MAGRATE_3_0, // 3.0 Hz
67  LSM303_MAGRATE_7_5, // 7.5 Hz
68  LSM303_MAGRATE_15, // 15 Hz
69  LSM303_MAGRATE_30, // 30 Hz
70  LSM303_MAGRATE_75, // 75 Hz
71  LSM303_MAGRATE_220 // 220 Hz
73 /*=========================================================================*/
74 
75 /**************************************************************************/
79 /**************************************************************************/
80 typedef struct lsm303MagData_s {
81  int16_t x;
82  int16_t y;
83  int16_t z;
85 /*=========================================================================*/
86 
87 #define LSM303_ID (0b11010100)
88 /*=========================================================================*/
89 
93 class Adafruit_LSM303DLH_Mag_Unified : public Adafruit_Sensor {
94 public:
95  Adafruit_LSM303DLH_Mag_Unified(int32_t sensorID = -1);
96 
97  bool begin(uint8_t i2c_addr = _ADDRESS_MAG, TwoWire *wire = &Wire);
98 
99  void enableAutoRange(bool enable);
100  void setMagGain(lsm303MagGain gain);
101  void setMagRate(lsm303MagRate rate);
102  bool getEvent(sensors_event_t *);
103  void getSensor(sensor_t *);
104 
108 
109 private:
110  int32_t _sensorID;
111 
112  void write8(byte address, byte reg, byte value);
113  byte read8(byte address, byte reg);
114  void read(void);
115  Adafruit_I2CDevice *i2c_dev;
116 };
117 
118 #endif
lsm303MagGain magGain
The current magnetometer gain.
Definition: Adafruit_LSM303DLH_Mag.h:106
int16_t y
y-axis data
Definition: Adafruit_LSM303DLH_Mag.h:82
int16_t z
z-axis data
Definition: Adafruit_LSM303DLH_Mag.h:83
lsm303MagData raw
Last read magnetometer data will be available here.
Definition: Adafruit_LSM303DLH_Mag.h:105
int16_t x
x-axis data
Definition: Adafruit_LSM303DLH_Mag.h:81
INTERNAL ACCELERATION DATA TYPE.
Definition: Adafruit_LSM303DLH_Mag.h:80
bool autoRangeEnabled
True if auto ranging is enabled.
Definition: Adafruit_LSM303DLH_Mag.h:107
lsm303MagRate
Magnetometer update rate settings.
Definition: Adafruit_LSM303DLH_Mag.h:63
lsm303MagRegisters_t
I2C bits.
Definition: Adafruit_LSM303DLH_Mag.h:27
Unified sensor driver for the magnetometer.
Definition: Adafruit_LSM303DLH_Mag.h:93
lsm303MagGain
Magnetometer gain settings.
Definition: Adafruit_LSM303DLH_Mag.h:49
#define _ADDRESS_MAG
I2C Address.
Definition: Adafruit_LSM303DLH_Mag.h:22
struct lsm303MagData_s lsm303MagData
INTERNAL ACCELERATION DATA TYPE.