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.
Fork of AK9752 by
AK9752.h@1:2035a4a54d3f, 2016-11-01 (annotated)
- Committer:
- tkstreet
- Date:
- Tue Nov 01 17:03:31 2016 +0000
- Revision:
- 1:2035a4a54d3f
- Parent:
- 0:51fa46d39a3e
Added comments and documentation to library.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| masahikofukasawa | 0:51fa46d39a3e | 1 | #ifndef __AK9752_H__ |
| masahikofukasawa | 0:51fa46d39a3e | 2 | #define __AK9752_H__ |
| masahikofukasawa | 0:51fa46d39a3e | 3 | |
| masahikofukasawa | 0:51fa46d39a3e | 4 | #include "mbed.h" |
| masahikofukasawa | 0:51fa46d39a3e | 5 | |
| tkstreet | 1:2035a4a54d3f | 6 | /** |
| tkstreet | 1:2035a4a54d3f | 7 | * Device driver for AK9752. |
| tkstreet | 1:2035a4a54d3f | 8 | * @note AK9752 is an IR sensor with I2C interface. |
| tkstreet | 1:2035a4a54d3f | 9 | * Example: |
| tkstreet | 1:2035a4a54d3f | 10 | * @code |
| tkstreet | 1:2035a4a54d3f | 11 | * #include "mbed.h" |
| tkstreet | 1:2035a4a54d3f | 12 | * #include "ak9752_reg.h" |
| tkstreet | 1:2035a4a54d3f | 13 | * #include "ak9752.h" |
| tkstreet | 1:2035a4a54d3f | 14 | * |
| tkstreet | 1:2035a4a54d3f | 15 | * int main() |
| tkstreet | 1:2035a4a54d3f | 16 | * { |
| tkstreet | 1:2035a4a54d3f | 17 | * // Coming soon |
| tkstreet | 1:2035a4a54d3f | 18 | * return 0; |
| tkstreet | 1:2035a4a54d3f | 19 | * } |
| tkstreet | 1:2035a4a54d3f | 20 | * @endcode |
| tkstreet | 1:2035a4a54d3f | 21 | * |
| tkstreet | 1:2035a4a54d3f | 22 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 23 | class AK9752 |
| masahikofukasawa | 0:51fa46d39a3e | 24 | { |
| masahikofukasawa | 0:51fa46d39a3e | 25 | public: |
| masahikofukasawa | 0:51fa46d39a3e | 26 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 27 | * Enum for return status. |
| masahikofukasawa | 0:51fa46d39a3e | 28 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 29 | typedef enum { |
| masahikofukasawa | 0:51fa46d39a3e | 30 | SUCCESS, /**< Success */ |
| masahikofukasawa | 0:51fa46d39a3e | 31 | ERROR, /**< Error */ |
| masahikofukasawa | 0:51fa46d39a3e | 32 | ERROR_I2C_WRITE, /**< I2C write error */ |
| masahikofukasawa | 0:51fa46d39a3e | 33 | ERROR_I2C_READ, /**< I2C read error */ |
| masahikofukasawa | 0:51fa46d39a3e | 34 | ERROR_ARG_OUT_OF_BOUNDS, /**< An argument is out of bounds */ |
| masahikofukasawa | 0:51fa46d39a3e | 35 | } Status; |
| masahikofukasawa | 0:51fa46d39a3e | 36 | |
| masahikofukasawa | 0:51fa46d39a3e | 37 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 38 | * Enum for slave address of AK9752. |
| masahikofukasawa | 0:51fa46d39a3e | 39 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 40 | typedef enum { |
| masahikofukasawa | 0:51fa46d39a3e | 41 | SLAVE_ADDR_1 = 0x64, /**< CAD1=0, CAD0=0 */ |
| masahikofukasawa | 0:51fa46d39a3e | 42 | } SlaveAddress; |
| masahikofukasawa | 0:51fa46d39a3e | 43 | |
| masahikofukasawa | 0:51fa46d39a3e | 44 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 45 | * Enum for operation mode of measurement. |
| masahikofukasawa | 0:51fa46d39a3e | 46 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 47 | typedef enum { |
| tkstreet | 1:2035a4a54d3f | 48 | MODE_STANDBY = 0x00, /**< MODE_STANDBY: 0x00 */ |
| tkstreet | 1:2035a4a54d3f | 49 | MODE_CONTINUOUS = 0x01, /**< MODE_CONTINUOUS: 0x01 */ |
| tkstreet | 1:2035a4a54d3f | 50 | MODE_SINGLE_SHOT = 0x02, /**< MODE_SINGLE_SHOT: 0x02 */ |
| masahikofukasawa | 0:51fa46d39a3e | 51 | } OperationMode; |
| masahikofukasawa | 0:51fa46d39a3e | 52 | |
| masahikofukasawa | 0:51fa46d39a3e | 53 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 54 | * Enum for Cut-off frequency for tempearature sensor setting. |
| masahikofukasawa | 0:51fa46d39a3e | 55 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 56 | typedef enum { |
| masahikofukasawa | 0:51fa46d39a3e | 57 | FCTMP_NOFILTER = 0x00, /**< No Filter */ |
| masahikofukasawa | 0:51fa46d39a3e | 58 | FCTMP_2P5HZ = 0x01, /**< Fc = 2.5 Hz */ |
| masahikofukasawa | 0:51fa46d39a3e | 59 | FCTMP_0P9HZ = 0x02, /**< Fc = 0.9 Hz */ |
| masahikofukasawa | 0:51fa46d39a3e | 60 | FCTMP_0P45HZ = 0x03, /**< Fc = 0.45 Hz */ |
| masahikofukasawa | 0:51fa46d39a3e | 61 | FCTMP_0P22HZ = 0x04, /**< Fc = 0.22 Hz */ |
| masahikofukasawa | 0:51fa46d39a3e | 62 | } FcTmp; |
| masahikofukasawa | 0:51fa46d39a3e | 63 | |
| masahikofukasawa | 0:51fa46d39a3e | 64 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 65 | * Enum for Cut-off frequency for IR sensor setting. |
| masahikofukasawa | 0:51fa46d39a3e | 66 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 67 | typedef enum { |
| masahikofukasawa | 0:51fa46d39a3e | 68 | FCIR_NOFILTER = 0x00, /**< No Filter */ |
| masahikofukasawa | 0:51fa46d39a3e | 69 | FCIR_2P5HZ = 0x01, /**< Fc = 2.5 Hz */ |
| masahikofukasawa | 0:51fa46d39a3e | 70 | FCIR_0P9HZ = 0x02, /**< Fc = 0.9 Hz */ |
| masahikofukasawa | 0:51fa46d39a3e | 71 | FCIR_0P45HZ = 0x03, /**< Fc = 0.45 Hz */ |
| masahikofukasawa | 0:51fa46d39a3e | 72 | } FcIr; |
| masahikofukasawa | 0:51fa46d39a3e | 73 | |
| masahikofukasawa | 0:51fa46d39a3e | 74 | /** |
| tkstreet | 1:2035a4a54d3f | 75 | * Structure for interrupt status. |
| masahikofukasawa | 0:51fa46d39a3e | 76 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 77 | typedef struct { |
| tkstreet | 1:2035a4a54d3f | 78 | bool irh; /**< IR Sensor crossed high threshold. */ |
| tkstreet | 1:2035a4a54d3f | 79 | bool irl; /**< IR Sensor crossed low threshold. */ |
| tkstreet | 1:2035a4a54d3f | 80 | bool tmph; /**< Tempearture Sensor crossed high threshold. */ |
| tkstreet | 1:2035a4a54d3f | 81 | bool tmpl; /**< Temperature Sensor crossed low threshold. */ |
| tkstreet | 1:2035a4a54d3f | 82 | bool dr; /**< Data Ready. */ |
| masahikofukasawa | 0:51fa46d39a3e | 83 | } InterruptStatus; |
| masahikofukasawa | 0:51fa46d39a3e | 84 | |
| masahikofukasawa | 0:51fa46d39a3e | 85 | /** |
| tkstreet | 1:2035a4a54d3f | 86 | * Structure to hold threshold levels. |
| masahikofukasawa | 0:51fa46d39a3e | 87 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 88 | typedef struct { |
| tkstreet | 1:2035a4a54d3f | 89 | int16_t thirh; /**< High Threshold level for IR sensor. */ |
| tkstreet | 1:2035a4a54d3f | 90 | int16_t thirl; /**< Low Threshold level of IR sensor. */ |
| masahikofukasawa | 0:51fa46d39a3e | 91 | int16_t thtmph; /**< High Threshold level of temperature sensor. */ |
| masahikofukasawa | 0:51fa46d39a3e | 92 | int16_t thtmpl; /**< Low Threshold level of temperature sensor. */ |
| masahikofukasawa | 0:51fa46d39a3e | 93 | } Threshold; |
| masahikofukasawa | 0:51fa46d39a3e | 94 | |
| masahikofukasawa | 0:51fa46d39a3e | 95 | /** |
| tkstreet | 1:2035a4a54d3f | 96 | * Structure to hold all sensor data: IR, temperature, and interrupt flags. |
| masahikofukasawa | 0:51fa46d39a3e | 97 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 98 | typedef struct { |
| tkstreet | 1:2035a4a54d3f | 99 | InterruptStatus intStatus; /**< Interrupt status object */ |
| tkstreet | 1:2035a4a54d3f | 100 | int16_t ir; /**< IR Sensor Data (pA) */ |
| tkstreet | 1:2035a4a54d3f | 101 | int16_t temperature; /**< Temperature Data (deg C) */ |
| tkstreet | 1:2035a4a54d3f | 102 | bool dor; /**< Data Overrun: 1:data skip, 0:after ST2 read*/ |
| masahikofukasawa | 0:51fa46d39a3e | 103 | } SensorData; |
| tkstreet | 1:2035a4a54d3f | 104 | |
| masahikofukasawa | 0:51fa46d39a3e | 105 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 106 | * Constructor. |
| masahikofukasawa | 0:51fa46d39a3e | 107 | * |
| tkstreet | 1:2035a4a54d3f | 108 | * @param conn Instance of I2C |
| tkstreet | 1:2035a4a54d3f | 109 | * @param addr Slave address of the device |
| masahikofukasawa | 0:51fa46d39a3e | 110 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 111 | AK9752(); |
| masahikofukasawa | 0:51fa46d39a3e | 112 | |
| tkstreet | 1:2035a4a54d3f | 113 | /** |
| tkstreet | 1:2035a4a54d3f | 114 | * Initialize AK9752 connection. |
| tkstreet | 1:2035a4a54d3f | 115 | * |
| tkstreet | 1:2035a4a54d3f | 116 | * @param conn Instance of I2C |
| tkstreet | 1:2035a4a54d3f | 117 | * @param addr I2C slave address |
| tkstreet | 1:2035a4a54d3f | 118 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 119 | void init(I2C *conn, SlaveAddress addr); |
| masahikofukasawa | 0:51fa46d39a3e | 120 | |
| masahikofukasawa | 0:51fa46d39a3e | 121 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 122 | * Checks AK9752 connection. |
| tkstreet | 1:2035a4a54d3f | 123 | * |
| tkstreet | 1:2035a4a54d3f | 124 | * @return SUCCESS if connection is confirmed, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 125 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 126 | Status checkConnection(); |
| masahikofukasawa | 0:51fa46d39a3e | 127 | |
| masahikofukasawa | 0:51fa46d39a3e | 128 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 129 | * Gets interrupt enable/disable status. |
| tkstreet | 1:2035a4a54d3f | 130 | * |
| tkstreet | 1:2035a4a54d3f | 131 | * @param intStatus Interrupt enable status |
| tkstreet | 1:2035a4a54d3f | 132 | * |
| masahikofukasawa | 0:51fa46d39a3e | 133 | * @return SUCCESS if the interrupt status is obtained successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 134 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 135 | Status getInterruptEnable(InterruptStatus *intStatus); |
| masahikofukasawa | 0:51fa46d39a3e | 136 | |
| masahikofukasawa | 0:51fa46d39a3e | 137 | /** |
| masahikofukasawa | 0:51fa46d39a3e | 138 | * Sets interrupt enable/disable status. |
| tkstreet | 1:2035a4a54d3f | 139 | * |
| masahikofukasawa | 0:51fa46d39a3e | 140 | * @param intStatus interrupt status |
| tkstreet | 1:2035a4a54d3f | 141 | * |
| masahikofukasawa | 0:51fa46d39a3e | 142 | * @return SUCCESS if the interrupt status is set successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 143 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 144 | Status setInterruptEnable(const InterruptStatus *intStatus); |
| masahikofukasawa | 0:51fa46d39a3e | 145 | |
| masahikofukasawa | 0:51fa46d39a3e | 146 | /** |
| tkstreet | 1:2035a4a54d3f | 147 | * Gets sensor operation mode: Standby, Continuous or Single-Shot. |
| tkstreet | 1:2035a4a54d3f | 148 | * |
| masahikofukasawa | 0:51fa46d39a3e | 149 | * @param mode Pointer to the operation mode. |
| masahikofukasawa | 0:51fa46d39a3e | 150 | * @param fc_tmp Pointer to the tempearture sensor filter setting. |
| masahikofukasawa | 0:51fa46d39a3e | 151 | * @param fc_ir Pointer to the IR sensor filter setting. |
| tkstreet | 1:2035a4a54d3f | 152 | * |
| masahikofukasawa | 0:51fa46d39a3e | 153 | * @return SUCCESS if operation mode is set successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 154 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 155 | Status getOperationMode(OperationMode *mode, FcTmp *fc_tmp, FcIr *fc_ir); |
| masahikofukasawa | 0:51fa46d39a3e | 156 | |
| masahikofukasawa | 0:51fa46d39a3e | 157 | /** |
| tkstreet | 1:2035a4a54d3f | 158 | * Sets sensor Operation mode: Standby, Continuous or Single-Shot. |
| tkstreet | 1:2035a4a54d3f | 159 | * |
| tkstreet | 1:2035a4a54d3f | 160 | * @param mode Operation mode to be set. |
| tkstreet | 1:2035a4a54d3f | 161 | * @param fc_tmp Filter cut-off frequency setting for temperature sensor. |
| tkstreet | 1:2035a4a54d3f | 162 | * @param fc_ir Filter cut-off frequency setting for IR sensor. |
| tkstreet | 1:2035a4a54d3f | 163 | * |
| masahikofukasawa | 0:51fa46d39a3e | 164 | * @return SUCCESS if operation mode is set successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 165 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 166 | Status setOperationMode(OperationMode mode, FcTmp fc_tmp = FCTMP_NOFILTER, FcIr fc_ir = FCIR_NOFILTER); |
| masahikofukasawa | 0:51fa46d39a3e | 167 | |
| masahikofukasawa | 0:51fa46d39a3e | 168 | /** |
| tkstreet | 1:2035a4a54d3f | 169 | * Sets threshold of IR/temperature sensor. |
| tkstreet | 1:2035a4a54d3f | 170 | * |
| masahikofukasawa | 0:51fa46d39a3e | 171 | * @param th Pointer to the threshold structure to be set. |
| tkstreet | 1:2035a4a54d3f | 172 | * |
| masahikofukasawa | 0:51fa46d39a3e | 173 | * @return SUCCESS if threshold is set successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 174 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 175 | Status setThreshold(const Threshold *th); |
| masahikofukasawa | 0:51fa46d39a3e | 176 | |
| masahikofukasawa | 0:51fa46d39a3e | 177 | /** |
| tkstreet | 1:2035a4a54d3f | 178 | * Gets threshold of IR/temperature sensor. |
| tkstreet | 1:2035a4a54d3f | 179 | * |
| masahikofukasawa | 0:51fa46d39a3e | 180 | * @param th Pointer to the threshold structure to store the read data. |
| tkstreet | 1:2035a4a54d3f | 181 | * |
| masahikofukasawa | 0:51fa46d39a3e | 182 | * @return SUCCESS if threshold is read successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 183 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 184 | Status getThreshold(Threshold *th); |
| masahikofukasawa | 0:51fa46d39a3e | 185 | |
| masahikofukasawa | 0:51fa46d39a3e | 186 | /** |
| tkstreet | 1:2035a4a54d3f | 187 | * Resets the AK9752. |
| tkstreet | 1:2035a4a54d3f | 188 | * |
| masahikofukasawa | 0:51fa46d39a3e | 189 | * @return SUCCESS if the device is reset successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 190 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 191 | Status reset(); |
| masahikofukasawa | 0:51fa46d39a3e | 192 | |
| masahikofukasawa | 0:51fa46d39a3e | 193 | /** |
| tkstreet | 1:2035a4a54d3f | 194 | * Retrieves all sensor data: IR & Temperature data, and ST1, ST2, & INTCAUSE |
| tkstreet | 1:2035a4a54d3f | 195 | * registers. |
| tkstreet | 1:2035a4a54d3f | 196 | * |
| masahikofukasawa | 0:51fa46d39a3e | 197 | * @param data Pointer to the SensorData structure object to store the read data. |
| tkstreet | 1:2035a4a54d3f | 198 | * |
| masahikofukasawa | 0:51fa46d39a3e | 199 | * @return SUCCESS if data is obtained successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 200 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 201 | Status getSensorData(SensorData *data); |
| masahikofukasawa | 0:51fa46d39a3e | 202 | |
| masahikofukasawa | 0:51fa46d39a3e | 203 | /** |
| tkstreet | 1:2035a4a54d3f | 204 | * Reads indicated AK9752 register(s). |
| tkstreet | 1:2035a4a54d3f | 205 | * |
| masahikofukasawa | 0:51fa46d39a3e | 206 | * @param registerAddress Register address to be read. |
| tkstreet | 1:2035a4a54d3f | 207 | * @param buf Buffer to store the register data. |
| masahikofukasawa | 0:51fa46d39a3e | 208 | * @param length Length in bytes to be read. |
| tkstreet | 1:2035a4a54d3f | 209 | * |
| masahikofukasawa | 0:51fa46d39a3e | 210 | * @return SUCCESS if data is read successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 211 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 212 | Status read(char registerAddress, char *buf, int length); |
| masahikofukasawa | 0:51fa46d39a3e | 213 | |
| masahikofukasawa | 0:51fa46d39a3e | 214 | /** |
| tkstreet | 1:2035a4a54d3f | 215 | * Writes data into AK9752 register(s). |
| tkstreet | 1:2035a4a54d3f | 216 | * |
| masahikofukasawa | 0:51fa46d39a3e | 217 | * @param registerAddress Register address to be written. |
| masahikofukasawa | 0:51fa46d39a3e | 218 | * @param buf Data to be written. |
| masahikofukasawa | 0:51fa46d39a3e | 219 | * @param length Length in bytes to be written. |
| tkstreet | 1:2035a4a54d3f | 220 | * |
| masahikofukasawa | 0:51fa46d39a3e | 221 | * @return SUCCESS if data is written successfully, otherwise returns other value. |
| masahikofukasawa | 0:51fa46d39a3e | 222 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 223 | Status write(char registerAddress, const char *buf, int length); |
| masahikofukasawa | 0:51fa46d39a3e | 224 | |
| masahikofukasawa | 0:51fa46d39a3e | 225 | private: |
| masahikofukasawa | 0:51fa46d39a3e | 226 | /** |
| tkstreet | 1:2035a4a54d3f | 227 | * I2C connection. |
| masahikofukasawa | 0:51fa46d39a3e | 228 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 229 | I2C *connection; |
| masahikofukasawa | 0:51fa46d39a3e | 230 | |
| masahikofukasawa | 0:51fa46d39a3e | 231 | /** |
| tkstreet | 1:2035a4a54d3f | 232 | * Slave address. |
| masahikofukasawa | 0:51fa46d39a3e | 233 | */ |
| masahikofukasawa | 0:51fa46d39a3e | 234 | SlaveAddress slaveAddress; |
| masahikofukasawa | 0:51fa46d39a3e | 235 | |
| masahikofukasawa | 0:51fa46d39a3e | 236 | // const static uint8_t IR_DATA_LEN = 7; /**<! Data length of IR sensor. From ST1 to ST2. */ |
| masahikofukasawa | 0:51fa46d39a3e | 237 | |
| masahikofukasawa | 0:51fa46d39a3e | 238 | }; |
| masahikofukasawa | 0:51fa46d39a3e | 239 | |
| masahikofukasawa | 0:51fa46d39a3e | 240 | #endif // __AK9752_H__ |
