magnetometer

Committer:
gmatjuara
Date:
Thu Dec 12 02:30:07 2013 +0000
Revision:
0:94cb8cb26bf8
magnetometer

Who changed what in which revision?

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