Honeywell HMC6352 digital compass library.
Dependents: CanSat-C_test test AvoidTest Run-Avoid
HMC6352.h@2:0a44cb78fd9a, 2021-11-06 (annotated)
- Committer:
- miyajitakenari
- Date:
- Sat Nov 06 03:07:09 2021 +0000
- Revision:
- 2:0a44cb78fd9a
- Parent:
- 1:c1e543f15817
a
Who changed what in which revision?
User | Revision | Line number | New 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 */ |