Library for interfacing with NXP FXOS8700CQ accelerometer/magnetometer

Dependents:   Stick_Runner Stick_Runner 2645_FXOS8700CQ_Library AccGyroTest ... more

Committer:
eencae
Date:
Tue Jan 31 19:02:23 2017 +0000
Revision:
0:f66eda6a492a
Child:
1:09311e0a2c64
Library for interfacing with FXOS8700CQ accelerometer and magnetometer.

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
eencae 0:f66eda6a492a 16 #define FXOS8700CQ_ADDR (0x1D << 1) // for K64F board
eencae 0:f66eda6a492a 17 // values from 13.2 datasheet
eencae 0:f66eda6a492a 18 #define FXOS8700CQ_STATUS 0x00
eencae 0:f66eda6a492a 19 #define FXOS8700CQ_WHO_AM_I 0x0D
eencae 0:f66eda6a492a 20 #define FXOS8700CQ_XYZ_DATA_CFG 0x0E
eencae 0:f66eda6a492a 21 #define FXOS8700CQ_CTRL_REG1 0x2A
eencae 0:f66eda6a492a 22 #define FXOS8700CQ_M_CTRL_REG1 0x5B
eencae 0:f66eda6a492a 23 #define FXOS8700CQ_M_CTRL_REG2 0x5C
eencae 0:f66eda6a492a 24 #define FXOS8700CQ_WHO_AM_I_VAL 0xC7
eencae 0:f66eda6a492a 25 #define FXOS8700CQ_READ_LEN 13
eencae 0:f66eda6a492a 26
eencae 0:f66eda6a492a 27 #define PI 3.14159265359f
eencae 0:f66eda6a492a 28 #define RAD2DEG 57.2957795131f
eencae 0:f66eda6a492a 29
eencae 0:f66eda6a492a 30 struct Data {
eencae 0:f66eda6a492a 31 float ax;
eencae 0:f66eda6a492a 32 float ay;
eencae 0:f66eda6a492a 33 float az;
eencae 0:f66eda6a492a 34 float mx;
eencae 0:f66eda6a492a 35 float my;
eencae 0:f66eda6a492a 36 float mz;
eencae 0:f66eda6a492a 37 };
eencae 0:f66eda6a492a 38
eencae 0:f66eda6a492a 39 class FXOS8700CQ
eencae 0:f66eda6a492a 40 {
eencae 0:f66eda6a492a 41
eencae 0:f66eda6a492a 42 public:
eencae 0:f66eda6a492a 43 FXOS8700CQ(PinName sda, PinName scl);
eencae 0:f66eda6a492a 44 ~FXOS8700CQ();
eencae 0:f66eda6a492a 45 void init();
eencae 0:f66eda6a492a 46 Data get_values();
eencae 0:f66eda6a492a 47 float get_pitch();
eencae 0:f66eda6a492a 48 float get_roll();
eencae 0:f66eda6a492a 49
eencae 0:f66eda6a492a 50 private:
eencae 0:f66eda6a492a 51 I2C* i2c;
eencae 0:f66eda6a492a 52
eencae 0:f66eda6a492a 53 void send_byte_to_reg(char byte,char reg);
eencae 0:f66eda6a492a 54 char read_byte_from_reg(char reg);
eencae 0:f66eda6a492a 55 void read_bytes_from_reg(char reg,int number_of_bytes,char bytes[]);
eencae 0:f66eda6a492a 56 };
eencae 0:f66eda6a492a 57
eencae 0:f66eda6a492a 58 #endif