moon

Dependencies:   Hexi_OLED_SSD1351

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers accel_mag.cpp Source File

accel_mag.cpp

00001 #include "accel_mag.h"
00002 #include "mbed.h"
00003 
00004 FXOS8700::FXOS8700(PinName sda, PinName scl) : FXOS8700_i2c(sda,scl)
00005  {
00006        
00007  }
00008     
00009  /*Configure the accelerometer*/
00010 void FXOS8700::configureAccelerometer(void)
00011  {
00012    char d[2]; 
00013 //Put accelerometer in standby mode
00014    d[0] = FXOS8700_CTRL_REG1;                     
00015    d[1] = 0x00; 
00016    FXOS8700_i2c.write(FXOS8700_I2C_ADDRESS, d,2);   
00017           
00018 //Put accelerometer in active mode
00019    d[0] = FXOS8700_CTRL_REG1;                     
00020    d[1] = 0x01;
00021    FXOS8700_i2c.write(FXOS8700_I2C_ADDRESS, d, 2);   
00022       
00023  }
00024  /*Configure the magnetometer*/
00025   void FXOS8700:: configureMagnetometer(void)
00026  {
00027    char d[2];
00028    d[0] = FXOS8700_CTRL_REG1;                     //Standby mode (Magnetometer)
00029    d[1] = 0x00;
00030    FXOS8700_i2c.write(FXOS8700_I2C_ADDRESS, d,2);   
00031           
00032    
00033    d[0] = FXOS8700_M_CTRL_REG1;                   //hybrid mode (both accelerometer and magnetometer are active)
00034    d[1] = 0x03;
00035    FXOS8700_i2c.write(FXOS8700_I2C_ADDRESS, d, 2);   
00036    
00037 
00038    d[0] = FXOS8700_CTRL_REG1;                     //Active mode (Magnetometer)
00039    d[1] = 0x01;
00040    FXOS8700_i2c.write(FXOS8700_I2C_ADDRESS, d,2);  
00041    
00042  }
00043  
00044  void FXOS8700::getAccelData(float * accelData)
00045  {
00046   
00047    char data_bytes[7];
00048    char d[1];
00049    d[0]=FXOS8700_STATUS;
00050    FXOS8700_i2c.write(FXOS8700_I2C_ADDRESS,d,1,true);
00051 //Read data from X Y Z
00052    FXOS8700_i2c.read(FXOS8700_I2C_ADDRESS,data_bytes,7);
00053    
00054 /*Calculation derived from the datasheet*/
00055 /*256 = 2^8  or >>8 can be used*/
00056    accelData[0] =  ((float)((int16_t)(((data_bytes[1]<<8) + (data_bytes[2])))>> 2) * 0.000244);
00057    accelData[1] =  ((float)((int16_t)(((data_bytes[3]<<8) + (data_bytes[4])))>> 2) * 0.000244);
00058    accelData[2] =  ((float)((int16_t)(((data_bytes[5]<<8) + (data_bytes[6])))>> 2) * 0.000244);
00059    
00060  }
00061 
00062  void FXOS8700::getMagData(float * magData)
00063  {
00064   
00065    char data_bytes[7];
00066    char d[1];
00067    d[0]=FXOS8700_MDR_STATUS;
00068    FXOS8700_i2c.write(FXOS8700_I2C_ADDRESS,d,1,true);  // Read data from X Y Z
00069    FXOS8700_i2c.read(FXOS8700_I2C_ADDRESS,data_bytes,7);
00070    
00071    magData[0] =  (float)((int16_t)((data_bytes[1]<<8) + (data_bytes[2]))) * 0.1;
00072    magData[1] =  (float)((int16_t)((data_bytes[3]<<8) + (data_bytes[4]))) * 0.1;
00073    magData[2] =  (float)((int16_t)((data_bytes[5]<<8) + (data_bytes[6]))) * 0.1;
00074    
00075  }
00076      
00077      
00078 
00079