1

Dependencies:   mbed

Committer:
viniciushl
Date:
Thu Dec 08 12:26:27 2016 +0000
Revision:
0:c4316ce25c75
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
viniciushl 0:c4316ce25c75 1 /**
viniciushl 0:c4316ce25c75 2 * @author Uwe Gartmann
viniciushl 0:c4316ce25c75 3 * @author Used HMC5883L library developed by Jose R. Padron and Aaron Berk as template
viniciushl 0:c4316ce25c75 4 *
viniciushl 0:c4316ce25c75 5 * @section LICENSE
viniciushl 0:c4316ce25c75 6 *
viniciushl 0:c4316ce25c75 7 * Copyright (c) 2010 ARM Limited
viniciushl 0:c4316ce25c75 8 *
viniciushl 0:c4316ce25c75 9 * Permission is hereby granted, free of charge, to any person obtaining a copy
viniciushl 0:c4316ce25c75 10 * of this software and associated documentation files (the "Software"), to deal
viniciushl 0:c4316ce25c75 11 * in the Software without restriction, including without limitation the rights
viniciushl 0:c4316ce25c75 12 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
viniciushl 0:c4316ce25c75 13 * copies of the Software, and to permit persons to whom the Software is
viniciushl 0:c4316ce25c75 14 * furnished to do so, subject to the following conditions:
viniciushl 0:c4316ce25c75 15 *
viniciushl 0:c4316ce25c75 16 * The above copyright notice and this permission notice shall be included in
viniciushl 0:c4316ce25c75 17 * all copies or substantial portions of the Software.
viniciushl 0:c4316ce25c75 18 *
viniciushl 0:c4316ce25c75 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
viniciushl 0:c4316ce25c75 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
viniciushl 0:c4316ce25c75 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
viniciushl 0:c4316ce25c75 22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
viniciushl 0:c4316ce25c75 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
viniciushl 0:c4316ce25c75 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
viniciushl 0:c4316ce25c75 25 * THE SOFTWARE.
viniciushl 0:c4316ce25c75 26 *
viniciushl 0:c4316ce25c75 27 * @section DESCRIPTION
viniciushl 0:c4316ce25c75 28 *
viniciushl 0:c4316ce25c75 29 * Honeywell HMC5883L digital compass.
viniciushl 0:c4316ce25c75 30 *
viniciushl 0:c4316ce25c75 31 * Datasheet:
viniciushl 0:c4316ce25c75 32 *
viniciushl 0:c4316ce25c75 33 * http://www.ssec.honeywell.com/magnetic/datasheets/HMC5883L.pdf
viniciushl 0:c4316ce25c75 34 */
viniciushl 0:c4316ce25c75 35
viniciushl 0:c4316ce25c75 36 #ifndef HMC5883L_H
viniciushl 0:c4316ce25c75 37 #define HMC5883L_H
viniciushl 0:c4316ce25c75 38
viniciushl 0:c4316ce25c75 39 /**
viniciushl 0:c4316ce25c75 40 * Includes
viniciushl 0:c4316ce25c75 41 */
viniciushl 0:c4316ce25c75 42 #include "mbed.h"
viniciushl 0:c4316ce25c75 43
viniciushl 0:c4316ce25c75 44 /**
viniciushl 0:c4316ce25c75 45 * Defines
viniciushl 0:c4316ce25c75 46 */
viniciushl 0:c4316ce25c75 47 #define HMC5883L_I2C_ADDRESS 0x1E //7-bit address. 0x3C write, 0x3D read.
viniciushl 0:c4316ce25c75 48 #define HMC5883L_I2C_WRITE 0x3C
viniciushl 0:c4316ce25c75 49 #define HMC5883L_I2C_READ 0x3D
viniciushl 0:c4316ce25c75 50
viniciushl 0:c4316ce25c75 51 //Values Config A
viniciushl 0:c4316ce25c75 52 #define HMC5883L_0_5HZ_NORMAL 0x00
viniciushl 0:c4316ce25c75 53 #define HMC5883L_0_5HZ_POSITIVE 0x01
viniciushl 0:c4316ce25c75 54 #define HMC5883L_0_5HZ_NEGATIVE 0x02
viniciushl 0:c4316ce25c75 55
viniciushl 0:c4316ce25c75 56 #define HMC5883L_1HZ_NORMAL 0x04
viniciushl 0:c4316ce25c75 57 #define HMC5883L_1HZ_POSITIVE 0x05
viniciushl 0:c4316ce25c75 58 #define HMC5883L_1HZ_NEGATIVE 0x06
viniciushl 0:c4316ce25c75 59
viniciushl 0:c4316ce25c75 60 #define HMC5883L_2HZ_NORMAL 0x08
viniciushl 0:c4316ce25c75 61 #define HMC5883L_2HZ_POSITIVE 0x09
viniciushl 0:c4316ce25c75 62 #define HMC5883L_2HZ_NEGATIVE 0x0A
viniciushl 0:c4316ce25c75 63
viniciushl 0:c4316ce25c75 64 #define HMC5883L_5HZ_NORMAL 0x0C
viniciushl 0:c4316ce25c75 65 #define HMC5883L_5HZ_POSITIVE 0x0D
viniciushl 0:c4316ce25c75 66 #define HMC5883L_5HZ_NEGATIVE 0x0E
viniciushl 0:c4316ce25c75 67
viniciushl 0:c4316ce25c75 68 #define HMC5883L_10HZ_NORMAL 0x10
viniciushl 0:c4316ce25c75 69 #define HMC5883L_10HZ_POSITIVE 0x11
viniciushl 0:c4316ce25c75 70 #define HMC5883L_10HZ_NEGATIVE 0x12
viniciushl 0:c4316ce25c75 71
viniciushl 0:c4316ce25c75 72 #define HMC5883L_20HZ_NORMAL 0x14
viniciushl 0:c4316ce25c75 73 #define HMC5883L_20HZ_POSITIVE 0x15
viniciushl 0:c4316ce25c75 74 #define HMC5883L_20HZ_NEGATIVE 0x16
viniciushl 0:c4316ce25c75 75
viniciushl 0:c4316ce25c75 76 #define HMC5883L_50HZ_NORMAL 0x18
viniciushl 0:c4316ce25c75 77 #define HMC5883L_50HZ_POSITIVE 0x19
viniciushl 0:c4316ce25c75 78 #define HMC5883L_50HZ_NEGATIVE 0x1A
viniciushl 0:c4316ce25c75 79
viniciushl 0:c4316ce25c75 80 //Values Config B
viniciushl 0:c4316ce25c75 81 #define HMC5883L_0_7GA 0x00
viniciushl 0:c4316ce25c75 82 #define HMC5883L_1_0GA 0x20
viniciushl 0:c4316ce25c75 83 #define HMC5883L_1_5GA 0x40
viniciushl 0:c4316ce25c75 84 #define HMC5883L_2_0GA 0x60
viniciushl 0:c4316ce25c75 85 #define HMC5883L_3_2GA 0x80
viniciushl 0:c4316ce25c75 86 #define HMC5883L_3_8GA 0xA0
viniciushl 0:c4316ce25c75 87 #define HMC5883L_4_5GA 0xC0
viniciushl 0:c4316ce25c75 88 #define HMC5883L_6_5GA 0xE0
viniciushl 0:c4316ce25c75 89
viniciushl 0:c4316ce25c75 90 //Values MODE
viniciushl 0:c4316ce25c75 91 #define HMC5883L_CONTINUOUS 0x00
viniciushl 0:c4316ce25c75 92 #define HMC5883L_SINGLE 0x01
viniciushl 0:c4316ce25c75 93 #define HMC5883L_IDLE 0x02
viniciushl 0:c4316ce25c75 94 #define HMC5883L_SLEEP 0x03
viniciushl 0:c4316ce25c75 95
viniciushl 0:c4316ce25c75 96
viniciushl 0:c4316ce25c75 97
viniciushl 0:c4316ce25c75 98 #define HMC5883L_CONFIG_A 0x00
viniciushl 0:c4316ce25c75 99 #define HMC5883L_CONFIG_B 0x01
viniciushl 0:c4316ce25c75 100 #define HMC5883L_MODE 0x02
viniciushl 0:c4316ce25c75 101 #define HMC5883L_X_MSB 0x03
viniciushl 0:c4316ce25c75 102 #define HMC5883L_X_LSB 0x04
viniciushl 0:c4316ce25c75 103 #define HMC5883L_Z_MSB 0x05
viniciushl 0:c4316ce25c75 104 #define HMC5883L_Z_LSB 0x06
viniciushl 0:c4316ce25c75 105 #define HMC5883L_Y_MSB 0x07
viniciushl 0:c4316ce25c75 106 #define HMC5883L_Y_LSB 0x08
viniciushl 0:c4316ce25c75 107 #define HMC5883L_STATUS 0x09
viniciushl 0:c4316ce25c75 108 #define HMC5883L_IDENT_A 0x0A
viniciushl 0:c4316ce25c75 109 #define HMC5883L_IDENT_B 0x0B
viniciushl 0:c4316ce25c75 110 #define HMC5883L_IDENT_C 0x0C
viniciushl 0:c4316ce25c75 111
viniciushl 0:c4316ce25c75 112
viniciushl 0:c4316ce25c75 113
viniciushl 0:c4316ce25c75 114 /**
viniciushl 0:c4316ce25c75 115 * Honeywell HMC5883L digital compass.
viniciushl 0:c4316ce25c75 116 */
viniciushl 0:c4316ce25c75 117 class HMC5883L {
viniciushl 0:c4316ce25c75 118
viniciushl 0:c4316ce25c75 119 public:
viniciushl 0:c4316ce25c75 120
viniciushl 0:c4316ce25c75 121 /**
viniciushl 0:c4316ce25c75 122 * Constructor.
viniciushl 0:c4316ce25c75 123 *
viniciushl 0:c4316ce25c75 124 * @param sda mbed pin to use for SDA line of I2C interface.
viniciushl 0:c4316ce25c75 125 * @param scl mbed pin to use for SCL line of I2C interface.
viniciushl 0:c4316ce25c75 126 */
viniciushl 0:c4316ce25c75 127 HMC5883L(PinName sda, PinName scl);
viniciushl 0:c4316ce25c75 128
viniciushl 0:c4316ce25c75 129
viniciushl 0:c4316ce25c75 130 /**
viniciushl 0:c4316ce25c75 131 * Enter into sleep mode.
viniciushl 0:c4316ce25c75 132 *
viniciushl 0:c4316ce25c75 133 */
viniciushl 0:c4316ce25c75 134 void setSleepMode();
viniciushl 0:c4316ce25c75 135
viniciushl 0:c4316ce25c75 136
viniciushl 0:c4316ce25c75 137 /**
viniciushl 0:c4316ce25c75 138 * Set Device in Default Mode.
viniciushl 0:c4316ce25c75 139 * HMC5883L_CONTINUOUS, HMC5883L_10HZ_NORMAL HMC5883L_1_0GA
viniciushl 0:c4316ce25c75 140 */
viniciushl 0:c4316ce25c75 141 void setDefault();
viniciushl 0:c4316ce25c75 142
viniciushl 0:c4316ce25c75 143
viniciushl 0:c4316ce25c75 144 /**
viniciushl 0:c4316ce25c75 145 * Read the memory location on the device which contains the address.
viniciushl 0:c4316ce25c75 146 *
viniciushl 0:c4316ce25c75 147 * @param Pointer to a buffer to hold the address value
viniciushl 0:c4316ce25c75 148 * Expected H, 4 and 3.
viniciushl 0:c4316ce25c75 149 */
viniciushl 0:c4316ce25c75 150 void getAddress(char * address);
viniciushl 0:c4316ce25c75 151
viniciushl 0:c4316ce25c75 152
viniciushl 0:c4316ce25c75 153
viniciushl 0:c4316ce25c75 154 /**
viniciushl 0:c4316ce25c75 155 * Set the operation mode.
viniciushl 0:c4316ce25c75 156 *
viniciushl 0:c4316ce25c75 157 * @param mode 0x00 -> Continuous
viniciushl 0:c4316ce25c75 158 * 0x01 -> Single
viniciushl 0:c4316ce25c75 159 * 0x02 -> Idle
viniciushl 0:c4316ce25c75 160 * @param ConfigA values
viniciushl 0:c4316ce25c75 161 * @param ConfigB values
viniciushl 0:c4316ce25c75 162 */
viniciushl 0:c4316ce25c75 163 void setOpMode(int mode, int ConfigA, int ConfigB);
viniciushl 0:c4316ce25c75 164
viniciushl 0:c4316ce25c75 165 /**
viniciushl 0:c4316ce25c75 166 * Write to on the device.
viniciushl 0:c4316ce25c75 167 *
viniciushl 0:c4316ce25c75 168 * @param address Address to write to.
viniciushl 0:c4316ce25c75 169 * @param data Data to write.
viniciushl 0:c4316ce25c75 170 */
viniciushl 0:c4316ce25c75 171
viniciushl 0:c4316ce25c75 172 void write(int address, int data);
viniciushl 0:c4316ce25c75 173
viniciushl 0:c4316ce25c75 174 /**
viniciushl 0:c4316ce25c75 175 * Get the output of all three axes.
viniciushl 0:c4316ce25c75 176 *
viniciushl 0:c4316ce25c75 177 * @param Pointer to a buffer to hold the magnetics value for the
viniciushl 0:c4316ce25c75 178 * x-axis, y-axis and z-axis [in that order].
viniciushl 0:c4316ce25c75 179 */
viniciushl 0:c4316ce25c75 180 void readData(int* getMag);
viniciushl 0:c4316ce25c75 181
viniciushl 0:c4316ce25c75 182 /**
viniciushl 0:c4316ce25c75 183 * Get the output of X axis.
viniciushl 0:c4316ce25c75 184 *
viniciushl 0:c4316ce25c75 185 * @return x-axis magnetic value
viniciushl 0:c4316ce25c75 186 */
viniciushl 0:c4316ce25c75 187 int getMx();
viniciushl 0:c4316ce25c75 188
viniciushl 0:c4316ce25c75 189 /**
viniciushl 0:c4316ce25c75 190 * Get the output of Y axis.
viniciushl 0:c4316ce25c75 191 *
viniciushl 0:c4316ce25c75 192 * @return y-axis magnetic value
viniciushl 0:c4316ce25c75 193 */
viniciushl 0:c4316ce25c75 194 int getMy();
viniciushl 0:c4316ce25c75 195
viniciushl 0:c4316ce25c75 196 /**
viniciushl 0:c4316ce25c75 197 * Get the output of Z axis.
viniciushl 0:c4316ce25c75 198 *
viniciushl 0:c4316ce25c75 199 * @return z-axis magnetic value
viniciushl 0:c4316ce25c75 200 */
viniciushl 0:c4316ce25c75 201 int getMz();
viniciushl 0:c4316ce25c75 202
viniciushl 0:c4316ce25c75 203
viniciushl 0:c4316ce25c75 204 /**
viniciushl 0:c4316ce25c75 205 * Get the current operation mode.
viniciushl 0:c4316ce25c75 206 *
viniciushl 0:c4316ce25c75 207 * @return Status register values
viniciushl 0:c4316ce25c75 208 */
viniciushl 0:c4316ce25c75 209 int getStatus(void);
viniciushl 0:c4316ce25c75 210
viniciushl 0:c4316ce25c75 211
viniciushl 0:c4316ce25c75 212
viniciushl 0:c4316ce25c75 213 I2C* i2c_;
viniciushl 0:c4316ce25c75 214
viniciushl 0:c4316ce25c75 215
viniciushl 0:c4316ce25c75 216
viniciushl 0:c4316ce25c75 217 };
viniciushl 0:c4316ce25c75 218
viniciushl 0:c4316ce25c75 219 #endif /* HMC5883L_H */