Tisham Dhar / FXOS8700CQ

Dependents:   Hexi_GPSIMU_Hotshoe

Fork of FXOS8700CQ by Craig Evans

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FXOS8700CQ.h Source File

FXOS8700CQ.h

00001 /* FXOS8700CQ Library
00002 
00003 Sample code from ELEC2645 - demonstrates how to create a library
00004 for the K64F on-board accelerometer and magnetometer
00005 
00006 (c) Craig A. Evans, University of Leeds, Jan 2017
00007 
00008 */
00009 
00010 #ifndef FXOS8700CQ_H
00011 #define FXOS8700CQ_H
00012 
00013 #include "mbed.h"
00014 
00015 // mbed API uses 8-bit addresses so need to left-shift 7-bit addresses by 1
00016 // FXOS8700CQ I2C address
00017 #define FXOS8700CQ_SLAVE_ADDR0 (0x1E<<1) // with pins SA0=0, SA1=0
00018 #define FXOS8700CQ_SLAVE_ADDR1 (0x1D<<1) // with pins SA0=1, SA1=0
00019 #define FXOS8700CQ_SLAVE_ADDR2 (0x1C<<1) // with pins SA0=0, SA1=1
00020 #define FXOS8700CQ_SLAVE_ADDR3 (0x1F<<1) // with pins SA0=1, SA1=1
00021 //#define FXOS8700CQ_ADDR   FXOS8700CQ_SLAVE_ADDR1    // for K64F board
00022 #define FXOS8700CQ_ADDR   FXOS8700CQ_SLAVE_ADDR0    // for Hexiwear board
00023 // values from 13.2 datasheet
00024 #define FXOS8700CQ_STATUS 0x00
00025 #define FXOS8700CQ_WHO_AM_I 0x0D
00026 #define FXOS8700CQ_XYZ_DATA_CFG 0x0E
00027 #define FXOS8700CQ_CTRL_REG1 0x2A
00028 #define FXOS8700CQ_M_CTRL_REG1 0x5B
00029 #define FXOS8700CQ_M_CTRL_REG2 0x5C
00030 #define FXOS8700CQ_WHO_AM_I_VAL 0xC7
00031 #define FXOS8700CQ_READ_LEN 13
00032 
00033 #define PI 3.14159265358979323846f
00034 #define RAD2DEG 57.2957795131f
00035 
00036 struct Data {
00037     float ax;
00038     float ay;
00039     float az;
00040     float mx;
00041     float my;
00042     float mz;
00043 };
00044 
00045 class FXOS8700CQ
00046 {
00047 
00048 public:
00049     FXOS8700CQ(PinName sda, PinName scl);
00050     ~FXOS8700CQ();
00051     void init();
00052     Data get_values();
00053     float get_pitch();
00054     float get_roll();
00055 
00056 private:
00057     I2C* i2c;
00058 
00059     void send_byte_to_reg(char byte,char reg);
00060     char read_byte_from_reg(char reg);
00061     void read_bytes_from_reg(char reg,int number_of_bytes,char bytes[]);
00062 };
00063 
00064 #endif