Library for interfacing with NXP FXOS8700CQ accelerometer/magnetometer
Dependents: Hexi_GPSIMU_Hotshoe
Fork of FXOS8700CQ by
FXOS8700CQ.h@1:b320fe026cc5, 2017-02-02 (annotated)
- Committer:
- whatnick
- Date:
- Thu Feb 02 03:07:59 2017 +0000
- Revision:
- 1:b320fe026cc5
- Parent:
- 0:f66eda6a492a
Added multiple addresses
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:f66eda6a492a | 1 | /* FXOS8700CQ Library |
eencae | 0:f66eda6a492a | 2 | |
eencae | 0:f66eda6a492a | 3 | Sample code from ELEC2645 - demonstrates how to create a library |
eencae | 0:f66eda6a492a | 4 | for the K64F on-board accelerometer and magnetometer |
eencae | 0:f66eda6a492a | 5 | |
eencae | 0:f66eda6a492a | 6 | (c) Craig A. Evans, University of Leeds, Jan 2017 |
eencae | 0:f66eda6a492a | 7 | |
eencae | 0:f66eda6a492a | 8 | */ |
eencae | 0:f66eda6a492a | 9 | |
eencae | 0:f66eda6a492a | 10 | #ifndef FXOS8700CQ_H |
eencae | 0:f66eda6a492a | 11 | #define FXOS8700CQ_H |
eencae | 0:f66eda6a492a | 12 | |
eencae | 0:f66eda6a492a | 13 | #include "mbed.h" |
eencae | 0:f66eda6a492a | 14 | |
eencae | 0:f66eda6a492a | 15 | // mbed API uses 8-bit addresses so need to left-shift 7-bit addresses by 1 |
whatnick | 1:b320fe026cc5 | 16 | // FXOS8700CQ I2C address |
whatnick | 1:b320fe026cc5 | 17 | #define FXOS8700CQ_SLAVE_ADDR0 (0x1E<<1) // with pins SA0=0, SA1=0 |
whatnick | 1:b320fe026cc5 | 18 | #define FXOS8700CQ_SLAVE_ADDR1 (0x1D<<1) // with pins SA0=1, SA1=0 |
whatnick | 1:b320fe026cc5 | 19 | #define FXOS8700CQ_SLAVE_ADDR2 (0x1C<<1) // with pins SA0=0, SA1=1 |
whatnick | 1:b320fe026cc5 | 20 | #define FXOS8700CQ_SLAVE_ADDR3 (0x1F<<1) // with pins SA0=1, SA1=1 |
whatnick | 1:b320fe026cc5 | 21 | //#define FXOS8700CQ_ADDR FXOS8700CQ_SLAVE_ADDR1 // for K64F board |
whatnick | 1:b320fe026cc5 | 22 | #define FXOS8700CQ_ADDR FXOS8700CQ_SLAVE_ADDR0 // for Hexiwear board |
eencae | 0:f66eda6a492a | 23 | // values from 13.2 datasheet |
eencae | 0:f66eda6a492a | 24 | #define FXOS8700CQ_STATUS 0x00 |
eencae | 0:f66eda6a492a | 25 | #define FXOS8700CQ_WHO_AM_I 0x0D |
eencae | 0:f66eda6a492a | 26 | #define FXOS8700CQ_XYZ_DATA_CFG 0x0E |
eencae | 0:f66eda6a492a | 27 | #define FXOS8700CQ_CTRL_REG1 0x2A |
eencae | 0:f66eda6a492a | 28 | #define FXOS8700CQ_M_CTRL_REG1 0x5B |
eencae | 0:f66eda6a492a | 29 | #define FXOS8700CQ_M_CTRL_REG2 0x5C |
eencae | 0:f66eda6a492a | 30 | #define FXOS8700CQ_WHO_AM_I_VAL 0xC7 |
eencae | 0:f66eda6a492a | 31 | #define FXOS8700CQ_READ_LEN 13 |
eencae | 0:f66eda6a492a | 32 | |
whatnick | 1:b320fe026cc5 | 33 | #define PI 3.14159265358979323846f |
eencae | 0:f66eda6a492a | 34 | #define RAD2DEG 57.2957795131f |
eencae | 0:f66eda6a492a | 35 | |
eencae | 0:f66eda6a492a | 36 | struct Data { |
eencae | 0:f66eda6a492a | 37 | float ax; |
eencae | 0:f66eda6a492a | 38 | float ay; |
eencae | 0:f66eda6a492a | 39 | float az; |
eencae | 0:f66eda6a492a | 40 | float mx; |
eencae | 0:f66eda6a492a | 41 | float my; |
eencae | 0:f66eda6a492a | 42 | float mz; |
eencae | 0:f66eda6a492a | 43 | }; |
eencae | 0:f66eda6a492a | 44 | |
eencae | 0:f66eda6a492a | 45 | class FXOS8700CQ |
eencae | 0:f66eda6a492a | 46 | { |
eencae | 0:f66eda6a492a | 47 | |
eencae | 0:f66eda6a492a | 48 | public: |
eencae | 0:f66eda6a492a | 49 | FXOS8700CQ(PinName sda, PinName scl); |
eencae | 0:f66eda6a492a | 50 | ~FXOS8700CQ(); |
eencae | 0:f66eda6a492a | 51 | void init(); |
eencae | 0:f66eda6a492a | 52 | Data get_values(); |
eencae | 0:f66eda6a492a | 53 | float get_pitch(); |
eencae | 0:f66eda6a492a | 54 | float get_roll(); |
eencae | 0:f66eda6a492a | 55 | |
eencae | 0:f66eda6a492a | 56 | private: |
eencae | 0:f66eda6a492a | 57 | I2C* i2c; |
eencae | 0:f66eda6a492a | 58 | |
eencae | 0:f66eda6a492a | 59 | void send_byte_to_reg(char byte,char reg); |
eencae | 0:f66eda6a492a | 60 | char read_byte_from_reg(char reg); |
eencae | 0:f66eda6a492a | 61 | void read_bytes_from_reg(char reg,int number_of_bytes,char bytes[]); |
eencae | 0:f66eda6a492a | 62 | }; |
eencae | 0:f66eda6a492a | 63 | |
eencae | 0:f66eda6a492a | 64 | #endif |