Very simple library for the FXOS8700 combined magnetometer and accelerometer

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FXOS8700.cpp Source File

FXOS8700.cpp

00001 #include "FXOS8700.h"
00002 
00003 FXOS8700::FXOS8700 (PinName sda, PinName scl, int chip_address) : i2c(sda, scl)
00004 {
00005    this->i2c_address=chip_address;
00006    char write_data[2];
00007    bool err=false;
00008    write_data[0]=FXOS8700CQ_CTRL_REG1;
00009    write_data[1]=0x00;
00010    err=err || i2c.write( i2c_address <<1,write_data,2);
00011    write_data[0]=FXOS8700CQ_M_CTRL_REG1;
00012    write_data[1]=0x1F;
00013    err=err ||  i2c.write( i2c_address <<1,write_data,2);
00014    write_data[0]=FXOS8700CQ_M_CTRL_REG2;
00015    write_data[1]=0x20;
00016    err=err ||  i2c.write( i2c_address <<1,write_data,2);
00017    write_data[0]=FXOS8700CQ_XYZ_DATA_CFG;
00018    write_data[1]=0x01;
00019    err=err ||  i2c.write( i2c_address <<1,write_data,2);
00020    write_data[0]=FXOS8700CQ_CTRL_REG1;
00021    write_data[1]=0x0D;
00022    err=err ||  i2c.write( i2c_address <<1,write_data,2);
00023    this->i2c_error=err;
00024 }
00025 
00026 
00027 
00028 FXOS8700::~FXOS8700 ()
00029 {
00030 
00031 }
00032 
00033 FXOS8700_data FXOS8700::read()
00034 {
00035        char read_data[14]={0};
00036        char write_data[8]={0};
00037        write_data[0]=FXOS8700CQ_STATUS;
00038        i2c.write( i2c_address <<1,write_data,1,1);
00039        i2c.read( i2c_address <<1,read_data,13);
00040        readdata.x = (int16_t)(((read_data[1] << 8) | read_data[2]))>> 2;
00041        readdata.y = (int16_t)(((read_data[3] << 8) | read_data[4]))>> 2;
00042        readdata.z = (int16_t)(((read_data[5] << 8) | read_data[6]))>> 2;
00043        readdata.mx = (read_data[7] << 8) | read_data[8];
00044        readdata.my = (read_data[9] << 8) | read_data[10];
00045        readdata.mz = (read_data[11] << 8) | read_data[12];
00046        return (readdata);
00047 
00048 }