moon
Dependencies: Hexi_OLED_SSD1351
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
Generated on Tue Jul 12 2022 18:19:43 by
1.7.2