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
Diff: HMC5983.h
- Revision:
- 0:cffff4c45a14
- Child:
- 1:fb6804e865fd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/HMC5983.h Fri Jun 15 12:22:40 2018 +0000
@@ -0,0 +1,135 @@
+/*
+ * HMC5983.cpp - library header
+ *
+ * simple library for the HMC5983 sensor from Honeywell
+ * adaptation form MBED from the Arduino library
+ *
+ * (c) 2014 Korneliusz Jarzebski, www.jarzebski.pl
+ * (c) 2014 David Cuartielles, Arduino LLC
+ * (c) 2016 Abel Romero, www.abelromero.com
+ * (c) 2018 Arcadie Cracan
+ */
+
+#ifndef HMC5983_h
+#define HMC5983_h
+
+#include "mbed.h"
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+// I2C ADDRESS
+#define HMC5983_ADDRESS 0x3C
+
+// MEMORY MAPPING
+/*
+Address Location Name Access
+---------------------------------------------------
+0x00 Configuration Register A Read/Write
+0x01 Configuration Register B Read/Write
+0x02 Mode Register Read/Write
+0x03 Data Output X MSB Register Read
+0x04 Data Output X LSB Register Read
+0x05 Data Output Z MSB Register Read
+0x06 Data Output Z LSB Register Read
+0x07 Data Output Y MSB Register Read
+0x08 Data Output Y LSB Register Read
+0x09 Status Register Read
+0x0A Identification Register A Read
+0x0B Identification Register B Read
+0x0C Identification Register C Read
+0x31 Temperature Output MSB Register Read
+0x32 Temperature Output LSB Register Read
+*/
+
+#define HMC5983_REG_CONFIG_A (0x00)
+#define HMC5983_REG_CONFIG_B (0x01)
+#define HMC5983_REG_MODE (0x02)
+
+#define HMC5983_OUT_X_MSB (0x03)
+#define HMC5983_OUT_X_LSB (0x04)
+#define HMC5983_OUT_Z_MSB (0x05)
+#define HMC5983_OUT_Z_LSB (0x06)
+#define HMC5983_OUT_Y_MSB (0x07)
+#define HMC5983_OUT_Y_LSB (0x08)
+
+#define HMC5983_STATUS (0x09)
+
+#define HMC5983_TEMP_OUT_MSB (0x31)
+#define HMC5983_TEMP_OUT_LSB (0x32)
+
+#define HMC5983_REG_OUT_X_M (0x03)
+#define HMC5983_REG_OUT_X_L (0x04)
+#define HMC5983_REG_OUT_Z_M (0x05)
+#define HMC5983_REG_OUT_Z_L (0x06)
+#define HMC5983_REG_OUT_Y_M (0x07)
+#define HMC5983_REG_OUT_Y_L (0x08)
+
+#define HMC5983_REG_IDENT_A (0x0A)
+#define HMC5983_REG_IDENT_B (0x0B)
+#define HMC5983_REG_IDENT_C (0x0C)
+
+typedef enum {
+ HMC5983_DATARATE_220HZ = 0b111,
+ HMC5983_DATARATE_75HZ = 0b110,
+ HMC5983_DATARATE_30HZ = 0b101,
+ HMC5983_DATARATE_15HZ = 0b100,
+ HMC5983_DATARATE_7_5HZ = 0b011,
+ HMC5983_DATARATE_3HZ = 0b010,
+ HMC5983_DATARATE_1_5HZ = 0b001,
+ HMC5983_DATARATE_0_75HZ = 0b000
+} hmc5983_dataRate_t;
+
+typedef enum {
+ HMC5983_SAMPLEAVERAGE_8 = 0b11,
+ HMC5983_SAMPLEAVERAGE_4 = 0b10,
+ HMC5983_SAMPLEAVERAGE_2 = 0b01,
+ HMC5983_SAMPLEAVERAGE_1 = 0b00
+} hmc5983_sampleAverages_t;
+
+typedef enum {
+ HMC5983_RANGE_8_1GA = 0b111,
+ HMC5983_RANGE_5_6GA = 0b110,
+ HMC5983_RANGE_4_7GA = 0b101,
+ HMC5983_RANGE_4GA = 0b100,
+ HMC5983_RANGE_2_5GA = 0b011,
+ HMC5983_RANGE_1_9GA = 0b010,
+ HMC5983_RANGE_1_3GA = 0b001,
+ HMC5983_RANGE_0_88GA = 0b000
+} hmc5983_range_t;
+
+typedef enum {
+ HMC5983_IDLE1 = 0b11,
+ HMC5983_IDLE2 = 0b10,
+ HMC5983_SINGLE = 0b01,
+ HMC5983_CONTINOUS = 0b00
+} hmc5983_mode_t;
+
+class HMC5983 {
+ public:
+ HMC5983(PinName sda, PinName scl);
+ HMC5983(I2C &i2c);
+
+ bool init();
+ void setRange(hmc5983_range_t range);
+ hmc5983_range_t getRange(void);
+ void setMeasurementMode(hmc5983_mode_t mode);
+ hmc5983_mode_t getMeasurementMode(void);
+ void setDataRate(hmc5983_dataRate_t dataRate);
+ hmc5983_dataRate_t getDataRate(void);
+ void setSampleAverages(hmc5983_sampleAverages_t sampleAverages);
+ hmc5983_sampleAverages_t getSampleAverages(void);
+
+ double read();
+
+ private:
+ I2C &i2c_;
+ char i2cRaw[sizeof(I2C)];
+ void writeRegister8(uint8_t reg, uint8_t value);
+ uint8_t readRegister8(uint8_t reg);
+ uint8_t fastRegister8(uint8_t reg);
+ int16_t readRegister16(uint8_t reg);
+};
+
+#endif
\ No newline at end of file