class IMU nucleo
Dependents: Coupe-Robotique-FIP-Main
Fork of IMU_FIP by
Imu.cpp
- Committer:
- quentin9696
- Date:
- 2015-05-21
- Revision:
- 5:e2e603447679
- Parent:
- 3:89e327e1217f
File content as of revision 5:e2e603447679:
#include "mbed.h"
#include "Imu.h"
#include "hts221.h"
#include "lis3mdl.h"
#include "lps25h.h"
#include "lsm6ds0.h"
#include "struct_IMU.h"
Imu::Imu() {
rawData.is_Raw = false;
rawData.TEMPERATURE_Value_C = 0.0f;
rawData.HUMIDITY_Value = 0.0f;
rawData.PRESSURE_Value = 0.0f;
rawData.MAG_Value = new AxesRaw_TypeDef();
rawData.ACC_Value = new AxesRaw_TypeDef();
rawData.GYR_Value = new AxesRaw_TypeDef();
offsetData.is_Raw = false;
offsetData.TEMPERATURE_Value_C = 0.0f;
offsetData.HUMIDITY_Value = 0.0f;
offsetData.PRESSURE_Value = 0.0f;
offsetData.MAG_Value = new AxesRaw_TypeDef();
offsetData.ACC_Value = new AxesRaw_TypeDef();
offsetData.GYR_Value = new AxesRaw_TypeDef();
}
void Imu::refresh(int i) {
if(i == 1)
{
//Offset
refresh(0);
rawData.is_Raw = false;
rawData.TEMPERATURE_Value_C -= offsetData.TEMPERATURE_Value_C;
rawData.HUMIDITY_Value -= offsetData.HUMIDITY_Value;
rawData.PRESSURE_Value -= offsetData.PRESSURE_Value;
rawData.MAG_Value->AXIS_X -= offsetData.MAG_Value->AXIS_X;
rawData.MAG_Value->AXIS_Y -= offsetData.MAG_Value->AXIS_Y;
rawData.MAG_Value->AXIS_Z -= offsetData.MAG_Value->AXIS_Z;
rawData.ACC_Value->AXIS_X -= offsetData.ACC_Value->AXIS_X;
rawData.ACC_Value->AXIS_Y -= offsetData.ACC_Value->AXIS_Y;
rawData.ACC_Value->AXIS_Z -= offsetData.ACC_Value->AXIS_Z;
rawData.GYR_Value->AXIS_X -= offsetData.GYR_Value->AXIS_X;
rawData.GYR_Value->AXIS_Y -= offsetData.GYR_Value->AXIS_Y;
rawData.GYR_Value->AXIS_Z -= offsetData.GYR_Value->AXIS_Z;
}
else
{
// Raw
rawData.is_Raw = true;
setRawHUM();
setRawTEMP();
setRawPRES();
setRawMAG();
setRawACC();
setRawGYR();
}
}
Data_IMU * Imu::getData() {
return &rawData;
}
void Imu::setRawHUM() {
hts221.GetHumidity((float *)&rawData.HUMIDITY_Value);
}
void Imu::setRawTEMP() {
hts221.GetTemperature((float *) &rawData.TEMPERATURE_Value_C);
}
void Imu::setRawPRES() {
lps25h.GetPressure((float *)&rawData.PRESSURE_Value);
}
void Imu::setRawMAG() {
lis3mdl.GetAxes(rawData.MAG_Value);
}
void Imu::setRawACC() {
lsm6ds0.Acc_GetAxes(rawData.ACC_Value);
}
void Imu::setRawGYR() {
lsm6ds0.Gyro_GetAxes(rawData.GYR_Value);
}
/* get and set offset */
Data_IMU * Imu::getOffset() {
return &offsetData;
}
void Imu::setOffset() {
refresh(0);
offsetData.is_Raw = rawData.is_Raw;
offsetData.TEMPERATURE_Value_C = rawData.TEMPERATURE_Value_C;
offsetData.HUMIDITY_Value = rawData.HUMIDITY_Value;
offsetData.PRESSURE_Value = rawData.PRESSURE_Value;
offsetData.MAG_Value->AXIS_X = rawData.MAG_Value->AXIS_X;
offsetData.MAG_Value->AXIS_Y = rawData.MAG_Value->AXIS_Y;
offsetData.MAG_Value->AXIS_Z = rawData.MAG_Value->AXIS_Z;
offsetData.ACC_Value->AXIS_X = rawData.ACC_Value->AXIS_X;
offsetData.ACC_Value->AXIS_Y = rawData.ACC_Value->AXIS_Y;
offsetData.ACC_Value->AXIS_Z = rawData.ACC_Value->AXIS_Z;
offsetData.GYR_Value->AXIS_X = rawData.GYR_Value->AXIS_X;
offsetData.GYR_Value->AXIS_Y = rawData.GYR_Value->AXIS_Y;
offsetData.GYR_Value->AXIS_Z = rawData.GYR_Value->AXIS_Z;
}
Robotique FIP
