Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: compassDemo weather_station_proj weather_station_project weather_station_proj_v1_2
HMC5983.h@0:cffff4c45a14, 2018-06-15 (annotated)
- Committer:
- acracan
- Date:
- Fri Jun 15 12:22:40 2018 +0000
- Revision:
- 0:cffff4c45a14
- Child:
- 1:fb6804e865fd
Adaptation from Arduino HMC5983 library
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| acracan | 0:cffff4c45a14 | 1 | /* |
| acracan | 0:cffff4c45a14 | 2 | * HMC5983.cpp - library header |
| acracan | 0:cffff4c45a14 | 3 | * |
| acracan | 0:cffff4c45a14 | 4 | * simple library for the HMC5983 sensor from Honeywell |
| acracan | 0:cffff4c45a14 | 5 | * adaptation form MBED from the Arduino library |
| acracan | 0:cffff4c45a14 | 6 | * |
| acracan | 0:cffff4c45a14 | 7 | * (c) 2014 Korneliusz Jarzebski, www.jarzebski.pl |
| acracan | 0:cffff4c45a14 | 8 | * (c) 2014 David Cuartielles, Arduino LLC |
| acracan | 0:cffff4c45a14 | 9 | * (c) 2016 Abel Romero, www.abelromero.com |
| acracan | 0:cffff4c45a14 | 10 | * (c) 2018 Arcadie Cracan |
| acracan | 0:cffff4c45a14 | 11 | */ |
| acracan | 0:cffff4c45a14 | 12 | |
| acracan | 0:cffff4c45a14 | 13 | #ifndef HMC5983_h |
| acracan | 0:cffff4c45a14 | 14 | #define HMC5983_h |
| acracan | 0:cffff4c45a14 | 15 | |
| acracan | 0:cffff4c45a14 | 16 | #include "mbed.h" |
| acracan | 0:cffff4c45a14 | 17 | |
| acracan | 0:cffff4c45a14 | 18 | #ifndef M_PI |
| acracan | 0:cffff4c45a14 | 19 | #define M_PI 3.14159265358979323846 |
| acracan | 0:cffff4c45a14 | 20 | #endif |
| acracan | 0:cffff4c45a14 | 21 | |
| acracan | 0:cffff4c45a14 | 22 | // I2C ADDRESS |
| acracan | 0:cffff4c45a14 | 23 | #define HMC5983_ADDRESS 0x3C |
| acracan | 0:cffff4c45a14 | 24 | |
| acracan | 0:cffff4c45a14 | 25 | // MEMORY MAPPING |
| acracan | 0:cffff4c45a14 | 26 | /* |
| acracan | 0:cffff4c45a14 | 27 | Address Location Name Access |
| acracan | 0:cffff4c45a14 | 28 | --------------------------------------------------- |
| acracan | 0:cffff4c45a14 | 29 | 0x00 Configuration Register A Read/Write |
| acracan | 0:cffff4c45a14 | 30 | 0x01 Configuration Register B Read/Write |
| acracan | 0:cffff4c45a14 | 31 | 0x02 Mode Register Read/Write |
| acracan | 0:cffff4c45a14 | 32 | 0x03 Data Output X MSB Register Read |
| acracan | 0:cffff4c45a14 | 33 | 0x04 Data Output X LSB Register Read |
| acracan | 0:cffff4c45a14 | 34 | 0x05 Data Output Z MSB Register Read |
| acracan | 0:cffff4c45a14 | 35 | 0x06 Data Output Z LSB Register Read |
| acracan | 0:cffff4c45a14 | 36 | 0x07 Data Output Y MSB Register Read |
| acracan | 0:cffff4c45a14 | 37 | 0x08 Data Output Y LSB Register Read |
| acracan | 0:cffff4c45a14 | 38 | 0x09 Status Register Read |
| acracan | 0:cffff4c45a14 | 39 | 0x0A Identification Register A Read |
| acracan | 0:cffff4c45a14 | 40 | 0x0B Identification Register B Read |
| acracan | 0:cffff4c45a14 | 41 | 0x0C Identification Register C Read |
| acracan | 0:cffff4c45a14 | 42 | 0x31 Temperature Output MSB Register Read |
| acracan | 0:cffff4c45a14 | 43 | 0x32 Temperature Output LSB Register Read |
| acracan | 0:cffff4c45a14 | 44 | */ |
| acracan | 0:cffff4c45a14 | 45 | |
| acracan | 0:cffff4c45a14 | 46 | #define HMC5983_REG_CONFIG_A (0x00) |
| acracan | 0:cffff4c45a14 | 47 | #define HMC5983_REG_CONFIG_B (0x01) |
| acracan | 0:cffff4c45a14 | 48 | #define HMC5983_REG_MODE (0x02) |
| acracan | 0:cffff4c45a14 | 49 | |
| acracan | 0:cffff4c45a14 | 50 | #define HMC5983_OUT_X_MSB (0x03) |
| acracan | 0:cffff4c45a14 | 51 | #define HMC5983_OUT_X_LSB (0x04) |
| acracan | 0:cffff4c45a14 | 52 | #define HMC5983_OUT_Z_MSB (0x05) |
| acracan | 0:cffff4c45a14 | 53 | #define HMC5983_OUT_Z_LSB (0x06) |
| acracan | 0:cffff4c45a14 | 54 | #define HMC5983_OUT_Y_MSB (0x07) |
| acracan | 0:cffff4c45a14 | 55 | #define HMC5983_OUT_Y_LSB (0x08) |
| acracan | 0:cffff4c45a14 | 56 | |
| acracan | 0:cffff4c45a14 | 57 | #define HMC5983_STATUS (0x09) |
| acracan | 0:cffff4c45a14 | 58 | |
| acracan | 0:cffff4c45a14 | 59 | #define HMC5983_TEMP_OUT_MSB (0x31) |
| acracan | 0:cffff4c45a14 | 60 | #define HMC5983_TEMP_OUT_LSB (0x32) |
| acracan | 0:cffff4c45a14 | 61 | |
| acracan | 0:cffff4c45a14 | 62 | #define HMC5983_REG_OUT_X_M (0x03) |
| acracan | 0:cffff4c45a14 | 63 | #define HMC5983_REG_OUT_X_L (0x04) |
| acracan | 0:cffff4c45a14 | 64 | #define HMC5983_REG_OUT_Z_M (0x05) |
| acracan | 0:cffff4c45a14 | 65 | #define HMC5983_REG_OUT_Z_L (0x06) |
| acracan | 0:cffff4c45a14 | 66 | #define HMC5983_REG_OUT_Y_M (0x07) |
| acracan | 0:cffff4c45a14 | 67 | #define HMC5983_REG_OUT_Y_L (0x08) |
| acracan | 0:cffff4c45a14 | 68 | |
| acracan | 0:cffff4c45a14 | 69 | #define HMC5983_REG_IDENT_A (0x0A) |
| acracan | 0:cffff4c45a14 | 70 | #define HMC5983_REG_IDENT_B (0x0B) |
| acracan | 0:cffff4c45a14 | 71 | #define HMC5983_REG_IDENT_C (0x0C) |
| acracan | 0:cffff4c45a14 | 72 | |
| acracan | 0:cffff4c45a14 | 73 | typedef enum { |
| acracan | 0:cffff4c45a14 | 74 | HMC5983_DATARATE_220HZ = 0b111, |
| acracan | 0:cffff4c45a14 | 75 | HMC5983_DATARATE_75HZ = 0b110, |
| acracan | 0:cffff4c45a14 | 76 | HMC5983_DATARATE_30HZ = 0b101, |
| acracan | 0:cffff4c45a14 | 77 | HMC5983_DATARATE_15HZ = 0b100, |
| acracan | 0:cffff4c45a14 | 78 | HMC5983_DATARATE_7_5HZ = 0b011, |
| acracan | 0:cffff4c45a14 | 79 | HMC5983_DATARATE_3HZ = 0b010, |
| acracan | 0:cffff4c45a14 | 80 | HMC5983_DATARATE_1_5HZ = 0b001, |
| acracan | 0:cffff4c45a14 | 81 | HMC5983_DATARATE_0_75HZ = 0b000 |
| acracan | 0:cffff4c45a14 | 82 | } hmc5983_dataRate_t; |
| acracan | 0:cffff4c45a14 | 83 | |
| acracan | 0:cffff4c45a14 | 84 | typedef enum { |
| acracan | 0:cffff4c45a14 | 85 | HMC5983_SAMPLEAVERAGE_8 = 0b11, |
| acracan | 0:cffff4c45a14 | 86 | HMC5983_SAMPLEAVERAGE_4 = 0b10, |
| acracan | 0:cffff4c45a14 | 87 | HMC5983_SAMPLEAVERAGE_2 = 0b01, |
| acracan | 0:cffff4c45a14 | 88 | HMC5983_SAMPLEAVERAGE_1 = 0b00 |
| acracan | 0:cffff4c45a14 | 89 | } hmc5983_sampleAverages_t; |
| acracan | 0:cffff4c45a14 | 90 | |
| acracan | 0:cffff4c45a14 | 91 | typedef enum { |
| acracan | 0:cffff4c45a14 | 92 | HMC5983_RANGE_8_1GA = 0b111, |
| acracan | 0:cffff4c45a14 | 93 | HMC5983_RANGE_5_6GA = 0b110, |
| acracan | 0:cffff4c45a14 | 94 | HMC5983_RANGE_4_7GA = 0b101, |
| acracan | 0:cffff4c45a14 | 95 | HMC5983_RANGE_4GA = 0b100, |
| acracan | 0:cffff4c45a14 | 96 | HMC5983_RANGE_2_5GA = 0b011, |
| acracan | 0:cffff4c45a14 | 97 | HMC5983_RANGE_1_9GA = 0b010, |
| acracan | 0:cffff4c45a14 | 98 | HMC5983_RANGE_1_3GA = 0b001, |
| acracan | 0:cffff4c45a14 | 99 | HMC5983_RANGE_0_88GA = 0b000 |
| acracan | 0:cffff4c45a14 | 100 | } hmc5983_range_t; |
| acracan | 0:cffff4c45a14 | 101 | |
| acracan | 0:cffff4c45a14 | 102 | typedef enum { |
| acracan | 0:cffff4c45a14 | 103 | HMC5983_IDLE1 = 0b11, |
| acracan | 0:cffff4c45a14 | 104 | HMC5983_IDLE2 = 0b10, |
| acracan | 0:cffff4c45a14 | 105 | HMC5983_SINGLE = 0b01, |
| acracan | 0:cffff4c45a14 | 106 | HMC5983_CONTINOUS = 0b00 |
| acracan | 0:cffff4c45a14 | 107 | } hmc5983_mode_t; |
| acracan | 0:cffff4c45a14 | 108 | |
| acracan | 0:cffff4c45a14 | 109 | class HMC5983 { |
| acracan | 0:cffff4c45a14 | 110 | public: |
| acracan | 0:cffff4c45a14 | 111 | HMC5983(PinName sda, PinName scl); |
| acracan | 0:cffff4c45a14 | 112 | HMC5983(I2C &i2c); |
| acracan | 0:cffff4c45a14 | 113 | |
| acracan | 0:cffff4c45a14 | 114 | bool init(); |
| acracan | 0:cffff4c45a14 | 115 | void setRange(hmc5983_range_t range); |
| acracan | 0:cffff4c45a14 | 116 | hmc5983_range_t getRange(void); |
| acracan | 0:cffff4c45a14 | 117 | void setMeasurementMode(hmc5983_mode_t mode); |
| acracan | 0:cffff4c45a14 | 118 | hmc5983_mode_t getMeasurementMode(void); |
| acracan | 0:cffff4c45a14 | 119 | void setDataRate(hmc5983_dataRate_t dataRate); |
| acracan | 0:cffff4c45a14 | 120 | hmc5983_dataRate_t getDataRate(void); |
| acracan | 0:cffff4c45a14 | 121 | void setSampleAverages(hmc5983_sampleAverages_t sampleAverages); |
| acracan | 0:cffff4c45a14 | 122 | hmc5983_sampleAverages_t getSampleAverages(void); |
| acracan | 0:cffff4c45a14 | 123 | |
| acracan | 0:cffff4c45a14 | 124 | double read(); |
| acracan | 0:cffff4c45a14 | 125 | |
| acracan | 0:cffff4c45a14 | 126 | private: |
| acracan | 0:cffff4c45a14 | 127 | I2C &i2c_; |
| acracan | 0:cffff4c45a14 | 128 | char i2cRaw[sizeof(I2C)]; |
| acracan | 0:cffff4c45a14 | 129 | void writeRegister8(uint8_t reg, uint8_t value); |
| acracan | 0:cffff4c45a14 | 130 | uint8_t readRegister8(uint8_t reg); |
| acracan | 0:cffff4c45a14 | 131 | uint8_t fastRegister8(uint8_t reg); |
| acracan | 0:cffff4c45a14 | 132 | int16_t readRegister16(uint8_t reg); |
| acracan | 0:cffff4c45a14 | 133 | }; |
| acracan | 0:cffff4c45a14 | 134 | |
| acracan | 0:cffff4c45a14 | 135 | #endif |