Wireless auto note device

Dependencies:   BLE_API invisdrum X_NUCLEO_IDB0XA1 kalman mbed

Committer:
fxanhkhoa
Date:
Tue Nov 22 02:57:33 2016 +0000
Revision:
0:ffd0caf3db9f
WAND PROJECT

Who changed what in which revision?

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