Honeywell HMC6352 digital compass library.

Dependents:   CanSat-C_test test AvoidTest Run-Avoid

Committer:
miyajitakenari
Date:
Sat Nov 06 03:07:09 2021 +0000
Revision:
2:0a44cb78fd9a
Parent:
1:c1e543f15817
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aberk 0:83c0cb554099 1 #ifndef HMC6352_H
aberk 0:83c0cb554099 2 #define HMC6352_H
aberk 0:83c0cb554099 3
aberk 0:83c0cb554099 4 /**
aberk 0:83c0cb554099 5 * Includes
aberk 0:83c0cb554099 6 */
aberk 0:83c0cb554099 7 #include "mbed.h"
aberk 0:83c0cb554099 8
aberk 0:83c0cb554099 9 /**
aberk 0:83c0cb554099 10 * Defines
aberk 0:83c0cb554099 11 */
miyajitakenari 2:0a44cb78fd9a 12 #define HMC6352_I2C_ADDRESS (0x42>>1) //7-bit address. 0x43 write, 0x42 read.
aberk 0:83c0cb554099 13
aberk 0:83c0cb554099 14 //Commands.
aberk 0:83c0cb554099 15 #define HMC6352_EEPROM_WRITE 0x77
aberk 0:83c0cb554099 16 #define HMC6352_RAM_WRITE 0x47
aberk 0:83c0cb554099 17 #define HMC6352_RAM_READ 0x67
aberk 0:83c0cb554099 18 #define HMC6352_ENTER_CALIB 0x43
aberk 0:83c0cb554099 19 #define HMC6352_EXIT_CALIB 0x45
aberk 0:83c0cb554099 20 #define HMC6352_GET_DATA 0x41
aberk 0:83c0cb554099 21
aberk 0:83c0cb554099 22 //EEPROM locations.
aberk 0:83c0cb554099 23 #define HMC6352_OPMODE 0x08
aberk 0:83c0cb554099 24
aberk 0:83c0cb554099 25 //RAM registers.
aberk 0:83c0cb554099 26 #define HMC6352_RAM_OPMODE 0x74
aberk 0:83c0cb554099 27
aberk 0:83c0cb554099 28 //Operational mode register masks.
aberk 0:83c0cb554099 29 #define HMC6352_CM_MR_1HZ 0x00
aberk 0:83c0cb554099 30 #define HMC6352_CM_MR_5HZ 0x20
aberk 0:83c0cb554099 31 #define HMC6352_CM_MR_10HZ 0x40
aberk 0:83c0cb554099 32 #define HMC6352_CM_MR_20HZ 0x60
aberk 0:83c0cb554099 33
aberk 0:83c0cb554099 34 #define HMC6352_PERIODIC_SR 0x10
aberk 0:83c0cb554099 35
aberk 0:83c0cb554099 36 #define HMC6352_STANDBY 0x00
aberk 0:83c0cb554099 37 #define HMC6352_QUERY 0x01
aberk 0:83c0cb554099 38 #define HMC6352_CONTINUOUS 0x02
aberk 0:83c0cb554099 39
aberk 0:83c0cb554099 40 /**
aberk 0:83c0cb554099 41 * Honeywell HMC6352 digital compass.
aberk 0:83c0cb554099 42 */
aberk 0:83c0cb554099 43 class HMC6352 {
aberk 0:83c0cb554099 44
aberk 0:83c0cb554099 45 public:
aberk 0:83c0cb554099 46
aberk 0:83c0cb554099 47 /**
aberk 0:83c0cb554099 48 * Constructor.
aberk 0:83c0cb554099 49 *
aberk 0:83c0cb554099 50 * @param sda mbed pin to use for SDA line of I2C interface.
aberk 0:83c0cb554099 51 * @param scl mbed pin to use for SCL line of I2C interface.
aberk 0:83c0cb554099 52 */
aberk 0:83c0cb554099 53 HMC6352(PinName sda, PinName scl);
aberk 0:83c0cb554099 54
aberk 0:83c0cb554099 55 /**
aberk 0:83c0cb554099 56 * Sample the device and return the result.
aberk 0:83c0cb554099 57 *
aberk 0:83c0cb554099 58 * @return In heading output mode, the current heading as a number between
aberk 0:83c0cb554099 59 * 0-3599, representing 0-359.9 degrees.
aberk 0:83c0cb554099 60 * In raw magnetometer X output mode, the raw output of the X-axis
aberk 0:83c0cb554099 61 * magnetometer.
aberk 0:83c0cb554099 62 * In raw magnetometer Y mode, the raw output of the Y-axis
aberk 0:83c0cb554099 63 * magnetometer.
aberk 0:83c0cb554099 64 * In magnetometer X mode, the corrected output of the X-axis
aberk 0:83c0cb554099 65 * magnetometer.
aberk 0:83c0cb554099 66 * In magnetometer Y mode, the corrected output of the Y-axis
aberk 0:83c0cb554099 67 * magnetometer.
aberk 0:83c0cb554099 68 */
aberk 0:83c0cb554099 69 int sample(void);
aberk 0:83c0cb554099 70
aberk 0:83c0cb554099 71
aberk 0:83c0cb554099 72 /**
aberk 0:83c0cb554099 73 * Enter into or exit from calibration mode.
aberk 0:83c0cb554099 74 *
aberk 0:83c0cb554099 75 * @param enterOrExit 0x45 -> Exit
aberk 0:83c0cb554099 76 * 0x43 -> Enter
aberk 0:83c0cb554099 77 */
aberk 0:83c0cb554099 78 void setCalibrationMode(int enterOrExit);
aberk 0:83c0cb554099 79
aberk 0:83c0cb554099 80 /**
aberk 0:83c0cb554099 81 * Get the current operation mode.
aberk 0:83c0cb554099 82 *
aberk 0:83c0cb554099 83 * @return 0x00 -> Standby mode
aberk 0:83c0cb554099 84 * 0x01 -> Query mode
aberk 0:83c0cb554099 85 * 0x02 -> Continuous mode
aberk 0:83c0cb554099 86 */
aberk 0:83c0cb554099 87 int getOpMode(void);
aberk 0:83c0cb554099 88
aberk 0:83c0cb554099 89 /**
aberk 0:83c0cb554099 90 * Set the operation mode.
aberk 0:83c0cb554099 91 *
aberk 0:83c0cb554099 92 * @param mode 0x00 -> Standby mode
aberk 0:83c0cb554099 93 * 0x01 -> Query mode
aberk 0:83c0cb554099 94 * 0x02 -> Continuous mode
aberk 0:83c0cb554099 95 * @param periodicSetReset 0x00 -> No periodic set/reset
aberk 0:83c0cb554099 96 * 0x01 -> Periodic set/reset
aberk 0:83c0cb554099 97 * @measurementRate Measurement rate in Hz for continuous rate.
aberk 0:83c0cb554099 98 * Possible rates: {1, 5, 10, 20}Hz.
aberk 0:83c0cb554099 99 */
aberk 0:83c0cb554099 100 void setOpMode(int mode, int periodicSetReset, int measurementRate = 0);
aberk 0:83c0cb554099 101
aberk 0:83c0cb554099 102 private:
aberk 0:83c0cb554099 103
aberk 0:83c0cb554099 104 I2C* i2c_;
aberk 0:83c0cb554099 105 int operationMode_;
aberk 0:83c0cb554099 106
aberk 0:83c0cb554099 107 /**
aberk 0:83c0cb554099 108 * Write to EEPROM or RAM on the device.
aberk 0:83c0cb554099 109 *
aberk 0:83c0cb554099 110 * @param EepromOrRam 0x77 -> Writing to EEPROM
aberk 0:83c0cb554099 111 * 0x47 -> Writing to RAM
aberk 0:83c0cb554099 112 * @param address Address to write to.
aberk 0:83c0cb554099 113 * @param data Data to write.
aberk 0:83c0cb554099 114 */
aberk 0:83c0cb554099 115 void write(int EepromOrRam, int address, int data);
aberk 0:83c0cb554099 116
aberk 0:83c0cb554099 117 /**
aberk 0:83c0cb554099 118 * Read EEPROM or RAM on the device.
aberk 0:83c0cb554099 119 *
aberk 0:83c0cb554099 120 * @param EepromOrRam 0x72 -> Reading from EEPROM
aberk 0:83c0cb554099 121 * 0x67 -> Reading from RAM
aberk 0:83c0cb554099 122 * @param address Address to read from.
aberk 0:83c0cb554099 123 * @return The contents of the memory address.
aberk 0:83c0cb554099 124 */
aberk 0:83c0cb554099 125 int read(int EepromOrRam, int address);
aberk 0:83c0cb554099 126
aberk 0:83c0cb554099 127 };
aberk 0:83c0cb554099 128
aberk 0:83c0cb554099 129 #endif /* HMC6352_H */