A multifunctional and modular Firmware for Multitech's mDot based on ARM mBed provides a widerange of functionality for several Sensors such as MAX44009, BME280, MPU9250, SI1143 and uBlox. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

Dependencies:   mDot_LoRa_Sensornode_Flowmeter_impl mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MPU9250Config.cpp Source File

MPU9250Config.cpp

00001 /*
00002  * MPU9250Config.cpp
00003  *
00004  *  Created on: 23.05.2016
00005  *      Author: Adrian
00006  */
00007 
00008 #include "MPU9250Config.h "
00009 
00010 MPU9250Config::MPU9250Config() {
00011     // TODO Auto-generated constructor stub
00012 
00013 }
00014 
00015 MPU9250Config::~MPU9250Config() {
00016     // TODO Auto-generated destructor stub
00017 }
00018 
00019 void MPU9250Config::build(MPU9250_MODE desiredMode){
00020     switch(desiredMode){
00021     case MPU9250_MODE_1:
00022         setAccelerometerScale(MPU9250_FULL_SCALE_2G);
00023         setGyroscopeScale(MPU9250_GYRO_FULL_SCALE_250DPS);
00024         setMagnetometerBitResolution(MPU9250_MAG_16_BIT);
00025         setMagnetometerMeasureMode(MPU9250_MAG_CONTINUOUS_MEASUREMENT_1);
00026         break;
00027     case MPU9250_MODE_2:
00028         setAccelerometerScale(MPU9250_FULL_SCALE_4G);
00029         setGyroscopeScale(MPU9250_GYRO_FULL_SCALE_500DPS);
00030         setMagnetometerBitResolution(MPU9250_MAG_16_BIT);
00031         setMagnetometerMeasureMode(MPU9250_MAG_CONTINUOUS_MEASUREMENT_1);
00032         break;
00033     case MPU9250_MODE_3:
00034         setAccelerometerScale(MPU9250_FULL_SCALE_8G);
00035         setGyroscopeScale(MPU9250_GYRO_FULL_SCALE_1000DPS);
00036         setMagnetometerBitResolution(MPU9250_MAG_16_BIT);
00037         setMagnetometerMeasureMode(MPU9250_MAG_CONTINUOUS_MEASUREMENT_1);
00038         break;
00039     case MPU9250_MODE_4:
00040         setAccelerometerScale(MPU9250_FULL_SCALE_2G);
00041         setGyroscopeScale(MPU9250_GYRO_FULL_SCALE_250DPS);
00042         setMagnetometerBitResolution(MPU9250_MAG_16_BIT);
00043         setMagnetometerMeasureMode(MPU9250_MAG_CONTINUOUS_MEASUREMENT_1);
00044         setInterruptPinConfiguration(MPU9250_INT_ANYRD_2CLEAR_MASK|
00045                 MPU9250_LATCH_INT_EN_MASK);
00046         setWakeOnMotionThreshold(MPU9250_WOM_THRESHOLD_1020_MG);
00047         break;
00048     }
00049 }
00050 
00051 void MPU9250Config::setAccelerometerScale(uint8_t accelerometerScale){
00052     this->accelerometerScale = accelerometerScale;
00053 }
00054 
00055 void MPU9250Config::setGyroscopeScale(uint8_t gyroscopeScale){
00056     this->gyroscopeScale = gyroscopeScale;
00057 }
00058 
00059 void MPU9250Config::setMagnetometerBitResolution(uint8_t magnetometerBitResolution){
00060     this->magnetometerBitResolution = magnetometerBitResolution;
00061 }
00062 
00063 void MPU9250Config::setMagnetometerMeasureMode(uint8_t magnetometermeasureMode){
00064     this->magnetometerMeasureMode = magnetometermeasureMode;
00065 }
00066 
00067 void MPU9250Config::setInterruptPinConfiguration(uint8_t interruptPinConfiguration){
00068     this->interruptPinConfiguration = interruptPinConfiguration;
00069 }
00070 
00071 void MPU9250Config::setInterruptEnableConfiguration(uint8_t interruptEnbaleConfiguration){
00072     this->interruptEnableConfiguration = interruptEnableConfiguration;
00073 }
00074 
00075 void MPU9250Config::setWakeOnMotionThreshold(uint8_t wakeOnMotionThreshold){
00076     this->wakeOnMotionThreshold;
00077 }
00078 
00079 uint8_t MPU9250Config::getAccelerometerScale(){
00080     return accelerometerScale;
00081 }
00082 
00083 uint8_t MPU9250Config::getGyroscopeScale(){
00084     return gyroscopeScale;
00085 }
00086 
00087 uint8_t MPU9250Config::getMagnetometerBitResolution(){
00088     return magnetometerBitResolution;
00089 }
00090 
00091 uint8_t MPU9250Config::getMagnetometerMeasureMode(){
00092     return magnetometerMeasureMode;
00093 }
00094 float MPU9250Config::getAccelerationDivider(){
00095     float divider;
00096 
00097     switch(accelerometerScale){
00098         case MPU9250_FULL_SCALE_2G:
00099             divider = 32768/2;
00100             break;
00101         case MPU9250_FULL_SCALE_4G:
00102             divider = 32768/4;
00103             break;
00104         case MPU9250_FULL_SCALE_8G:
00105             divider = 32768/8;
00106             break;
00107         case MPU9250_FULL_SCALE_16G:
00108             divider = 32768/16;
00109             break;
00110         default:
00111             divider = 1;
00112             break;
00113     }
00114 
00115     return divider;
00116 }
00117 
00118 float MPU9250Config::getGyroDivider(){
00119     float divider;
00120 
00121     switch(accelerometerScale){
00122         case MPU9250_GYRO_FULL_SCALE_250DPS:
00123             divider = 32768/250;
00124             break;
00125         case MPU9250_GYRO_FULL_SCALE_500DPS:
00126             divider = 32768/500;
00127             break;
00128         case MPU9250_GYRO_FULL_SCALE_1000DPS:
00129             divider = 32768/1000;
00130             break;
00131         case MPU9250_GYRO_FULL_SCALE_2000DPS:
00132             divider = 32768/2000;
00133             break;
00134         default:
00135             divider = 1;
00136             break;
00137     }
00138 
00139     return divider;
00140 }
00141 
00142 float MPU9250Config::getTeslaDivider(){
00143     float divider;
00144 
00145     switch(magnetometerBitResolution){
00146         case MPU9250_MAG_14_BIT:
00147             divider = 8190/4192;
00148             break;
00149         case MPU9250_MAG_16_BIT:
00150             divider = 32768/4192;
00151             break;
00152         default:
00153             divider = 1;
00154             break;
00155     }
00156 
00157     return divider;
00158 }
00159 
00160 uint8_t MPU9250Config::getInterruptPinConfiguration(){
00161     return interruptPinConfiguration;
00162 }
00163 
00164 uint8_t MPU9250Config::getInterruptEnableConfiguration(){
00165     return interruptEnableConfiguration;
00166 }
00167 
00168 uint8_t MPU9250Config::getWakeOnMotionThreshold(){
00169     return wakeOnMotionThreshold;
00170 }
00171 
00172 
00173