Library for interfacing with NXP FXOS8700CQ accelerometer/magnetometer

Dependents:   Hexi_GPSIMU_Hotshoe

Fork of FXOS8700CQ by Craig Evans

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?

UserRevisionLine numberNew 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