V 1.1
Fork of HMC5883L by
Diff: HMC5883L.h
- Revision:
- 1:b39752f2d354
- Parent:
- 0:cad18db1e431
diff -r cad18db1e431 -r b39752f2d354 HMC5883L.h --- a/HMC5883L.h Thu Dec 12 02:25:11 2013 +0000 +++ b/HMC5883L.h Tue Jan 03 09:22:45 2017 +0000 @@ -1,219 +1,42 @@ -/** - * @author Jose R. Padron - * @author Used HMC5883L library developed by Aaron Berk as template - * @section LICENSE - * - * Copyright (c) 2010 ARM Limited - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @section DESCRIPTION - * - * Honeywell HMC5883L digital compass. - * - * Datasheet: - * - * http://www.ssec.honeywell.com/magnetic/datasheets/HMC5883L.pdf - */ - #ifndef HMC5883L_H #define HMC5883L_H -/** - * Includes - */ #include "mbed.h" -/** - * Defines - */ -#define HMC5883L_I2C_ADDRESS 0x1E //7-bit address. 0x3C write, 0x3D read. -#define HMC5883L_I2C_WRITE 0x3C -#define HMC5883L_I2C_READ 0x3D - -//Values Config A -#define HMC5883L_0_5HZ_NORMAL 0x00 -#define HMC5883L_0_5HZ_POSITIVE 0x01 -#define HMC5883L_0_5HZ_NEGATIVE 0x02 - -#define HMC5883L_1HZ_NORMAL 0x04 -#define HMC5883L_1HZ_POSITIVE 0x05 -#define HMC5883L_1HZ_NEGATIVE 0x06 - -#define HMC5883L_2HZ_NORMAL 0x08 -#define HMC5883L_2HZ_POSITIVE 0x09 -#define HMC5883L_2HZ_NEGATIVE 0x0A - -#define HMC5883L_5HZ_NORMAL 0x0C -#define HMC5883L_5HZ_POSITIVE 0x0D -#define HMC5883L_5HZ_NEGATIVE 0x0E +#define HMC5883L_IDENT_A 0x0A // In this case the identification register A is used to identify the devide. ASCII value H +#define HMC5883L_I2C 0x1E // 7-bit address. 0x3C write, 0x3D read. +#define HMC5883L_I2C_WRITE 0x3C // Same as (& 0xFE), ensure that the MSB bit is being set to zero (RW=0 -> Writing) +#define HMC5883L_I2C_READ 0x3D // Same as (| 0x01), ensure that the MSB bit is being set to one (RW=1 -> Reading) -#define HMC5883L_10HZ_NORMAL 0x10 -#define HMC5883L_10HZ_POSITIVE 0x11 -#define HMC5883L_10HZ_NEGATIVE 0x12 - -#define HMC5883L_20HZ_NORMAL 0x14 -#define HMC5883L_20HZ_POSITIVE 0x15 -#define HMC5883L_20HZ_NEGATIVE 0x16 - -#define HMC5883L_50HZ_NORMAL 0x18 -#define HMC5883L_50HZ_POSITIVE 0x19 -#define HMC5883L_50HZ_NEGATIVE 0x1A +#define HMC5883L_CONFIG_A 0x00 +#define HMC5883L_CONFIG_B 0x01 +#define HMC5883L_MODE 0x02 +#define HMC5883L_STATUS 0x09 -//Values Config B -#define HMC5883L_0_7GA 0x00 -#define HMC5883L_1_0GA 0x20 -#define HMC5883L_1_5GA 0x40 -#define HMC5883L_2_0GA 0x60 -#define HMC5883L_3_2GA 0x80 -#define HMC5883L_3_8GA 0xA0 -#define HMC5883L_4_5GA 0xC0 -#define HMC5883L_6_5GA 0xE0 - -//Values MODE -#define HMC5883L_CONTINUOUS 0x00 -#define HMC5883L_SINGLE 0x01 -#define HMC5883L_IDLE 0x02 -#define HMC5883L_SLEEP 0x03 +#define HMC5883L_X_MSB 0x03 +#define HMC5883L_X_LSB 0x04 +#define HMC5883L_Z_MSB 0x05 +#define HMC5883L_Z_LSB 0x06 +#define HMC5883L_Y_MSB 0x07 +#define HMC5883L_Y_LSB 0x08 - -#define HMC5883L_CONFIG_A 0x00 -#define HMC5883L_CONFIG_B 0x01 -#define HMC5883L_MODE 0x02 -#define HMC5883L_X_MSB 0x03 -#define HMC5883L_X_LSB 0x04 -#define HMC5883L_Y_MSB 0x05 -#define HMC5883L_Y_LSB 0x06 -#define HMC5883L_Z_MSB 0x07 -#define HMC5883L_Z_LSB 0x08 -#define HMC5883L_STATUS 0x09 -#define HMC5883L_IDENT_A 0x0A -#define HMC5883L_IDENT_B 0x0B -#define HMC5883L_IDENT_C 0x0C - - - -/** - * Honeywell HMC5883L digital compass. - */ -class HMC5883L { +class HMC5883L +{ public: - /** - * Constructor. - * - * @param sda mbed pin to use for SDA line of I2C interface. - * @param scl mbed pin to use for SCL line of I2C interface. - */ HMC5883L(PinName sda, PinName scl); - - - /** - * Enter into sleep mode. - * - */ - void setSleepMode(); - - - /** - * Set Device in Default Mode. - * HMC5883L_CONTINUOUS, HMC5883L_10HZ_NORMAL HMC5883L_1_0GA - */ - void setDefault(); - - - /** - * Read the memory location on the device which contains the address. - * - * @param Pointer to a buffer to hold the address value - * Expected H, 4 and 3. - */ - void getAddress(char * address); - - - - /** - * Set the operation mode. - * - * @param mode 0x00 -> Continuous - * 0x01 -> Single - * 0x02 -> Idle - * @param ConfigA values - * @param ConfigB values - */ - void setOpMode(int mode, int ConfigA, int ConfigB); + float getMx(); + float getMy(); + float getMz(); +private: + void Write(char reg_address, char data); + char Read(char data); + void MultiByteRead(char address, char* output, int size); + I2C i2c; - /** - * Write to on the device. - * - * @param address Address to write to. - * @param data Data to write. - */ - - void write(int address, int data); - - /** - * Get the output of all three axes. - * - * @param Pointer to a buffer to hold the magnetics value for the - * x-axis, y-axis and z-axis [in that order]. - */ - void readData(int* readings); - - /** - * Get the output of X axis. - * - * @return x-axis magnetic value - */ - int getMx(); - - /** - * Get the output of Y axis. - * - * @return y-axis magnetic value - */ - int getMy(); - - /** - * Get the output of Z axis. - * - * @return z-axis magnetic value - */ - int getMz(); - - - /** - * Get the current operation mode. - * - * @return Status register values - */ - int getStatus(void); - - - - I2C* i2c_; - - - }; #endif /* HMC5883L_H */ - \ No newline at end of file +