lora sensnode

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_LoRa_Sensornode by Adrian Mitevski

Committer:
socie123
Date:
Wed Aug 10 12:54:10 2016 +0000
Revision:
1:e67174cc4953
Parent:
0:f2815503561f
lora sensnode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitea1 0:f2815503561f 1 /*
mitea1 0:f2815503561f 2 * MPU9250.cpp
mitea1 0:f2815503561f 3 *
mitea1 0:f2815503561f 4 * Created on: 19.05.2016
mitea1 0:f2815503561f 5 * Author: Adrian
mitea1 0:f2815503561f 6 */
mitea1 0:f2815503561f 7
mitea1 0:f2815503561f 8 #include "MPU9250.h"
mitea1 0:f2815503561f 9
mitea1 0:f2815503561f 10 MPU9250::MPU9250(I2C_RT* i2c){
mitea1 0:f2815503561f 11 setI2c(i2c);
mitea1 0:f2815503561f 12 this->config = new MPU9250Config();
mitea1 0:f2815503561f 13 }
mitea1 0:f2815503561f 14
mitea1 0:f2815503561f 15 MPU9250::~MPU9250() {
mitea1 0:f2815503561f 16 // TODO Auto-generated destructor stub
mitea1 0:f2815503561f 17 }
mitea1 0:f2815503561f 18
mitea1 0:f2815503561f 19 void MPU9250::setI2c(I2C_RT* i2c){
mitea1 0:f2815503561f 20 this->i2c = i2c;
mitea1 0:f2815503561f 21 }
mitea1 0:f2815503561f 22
mitea1 0:f2815503561f 23 void MPU9250::init(MPU9250_MODE desiredMode){
mitea1 0:f2815503561f 24 config->build(desiredMode);
mitea1 0:f2815503561f 25 enableAxisAccelerationMeasurement();
mitea1 0:f2815503561f 26 enableAxisGyroscopeMeasurement();
mitea1 0:f2815503561f 27 enableAxisTeslaMeasurement();
mitea1 0:f2815503561f 28 configureInterrupts();
mitea1 0:f2815503561f 29 setWakeOnReceiveThreshold();
mitea1 0:f2815503561f 30 }
mitea1 0:f2815503561f 31
mitea1 0:f2815503561f 32 float MPU9250::getXAxisAcceleration(){
mitea1 0:f2815503561f 33 uint8_t xAccelarationHighByte;
mitea1 0:f2815503561f 34 uint8_t xAccelarationLowByte;
mitea1 0:f2815503561f 35
mitea1 0:f2815503561f 36 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_ACCEL_XOUT_H,false,
mitea1 0:f2815503561f 37 &xAccelarationHighByte,1);
mitea1 0:f2815503561f 38 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_ACCEL_XOUT_L,false,
mitea1 0:f2815503561f 39 &xAccelarationLowByte,1);
mitea1 0:f2815503561f 40
mitea1 0:f2815503561f 41 int16_t acceleration = ((int16_t)xAccelarationHighByte<<8)|((int16_t)xAccelarationLowByte);
mitea1 0:f2815503561f 42
mitea1 0:f2815503561f 43 return ((float) acceleration)/config->getAccelerationDivider();
mitea1 0:f2815503561f 44
mitea1 0:f2815503561f 45 }
mitea1 0:f2815503561f 46
mitea1 0:f2815503561f 47 float MPU9250::getYAxisAcceleration(){
mitea1 0:f2815503561f 48 uint8_t yAccelarationHighByte;
mitea1 0:f2815503561f 49 uint8_t yAccelarationLowByte;
mitea1 0:f2815503561f 50
mitea1 0:f2815503561f 51 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_ACCEL_YOUT_H,false,
mitea1 0:f2815503561f 52 &yAccelarationHighByte,1);
mitea1 0:f2815503561f 53 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_ACCEL_YOUT_L,false,
mitea1 0:f2815503561f 54 &yAccelarationLowByte,1);
mitea1 0:f2815503561f 55
mitea1 0:f2815503561f 56 int16_t acceleration = yAccelarationHighByte<<8|yAccelarationLowByte;
mitea1 0:f2815503561f 57
mitea1 0:f2815503561f 58 return ((float) acceleration)/config->getAccelerationDivider();
mitea1 0:f2815503561f 59
mitea1 0:f2815503561f 60 }
mitea1 0:f2815503561f 61
mitea1 0:f2815503561f 62 float MPU9250::getZAxisAcceleration(){
mitea1 0:f2815503561f 63 uint8_t zAccelarationHighByte;
mitea1 0:f2815503561f 64 uint8_t zAccelarationLowByte;
mitea1 0:f2815503561f 65
mitea1 0:f2815503561f 66 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_ACCEL_ZOUT_H,false,
mitea1 0:f2815503561f 67 &zAccelarationHighByte,1);
mitea1 0:f2815503561f 68 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_ACCEL_ZOUT_L,false,
mitea1 0:f2815503561f 69 &zAccelarationLowByte,1);
mitea1 0:f2815503561f 70
mitea1 0:f2815503561f 71 int16_t acceleration = zAccelarationHighByte<<8|zAccelarationLowByte;
mitea1 0:f2815503561f 72
mitea1 0:f2815503561f 73 return ((float) acceleration)/config->getAccelerationDivider();
mitea1 0:f2815503561f 74
mitea1 0:f2815503561f 75 }
mitea1 0:f2815503561f 76
mitea1 0:f2815503561f 77 float MPU9250::getXAxisGyro(){
mitea1 0:f2815503561f 78 uint8_t xGyroscopeHighByte;
mitea1 0:f2815503561f 79 uint8_t xGyroscopeLowByte;
mitea1 0:f2815503561f 80
mitea1 0:f2815503561f 81 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_GYRO_XOUT_H,false,
mitea1 0:f2815503561f 82 &xGyroscopeHighByte,1);
mitea1 0:f2815503561f 83 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_GYRO_XOUT_L,false,
mitea1 0:f2815503561f 84 &xGyroscopeLowByte,1);
mitea1 0:f2815503561f 85
mitea1 0:f2815503561f 86 int16_t gyroscope = xGyroscopeHighByte<<8|xGyroscopeLowByte;
mitea1 0:f2815503561f 87
mitea1 0:f2815503561f 88 return ((float) gyroscope)/config->getGyroDivider();
mitea1 0:f2815503561f 89 }
mitea1 0:f2815503561f 90
mitea1 0:f2815503561f 91 float MPU9250::getYAxisGyro(){
mitea1 0:f2815503561f 92 uint8_t yGyroscopeHighByte;
mitea1 0:f2815503561f 93 uint8_t yGyroscopeLowByte;
mitea1 0:f2815503561f 94
mitea1 0:f2815503561f 95 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_GYRO_YOUT_H,false,
mitea1 0:f2815503561f 96 &yGyroscopeHighByte,1);
mitea1 0:f2815503561f 97 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_GYRO_YOUT_L,false,
mitea1 0:f2815503561f 98 &yGyroscopeLowByte,1);
mitea1 0:f2815503561f 99
mitea1 0:f2815503561f 100 int16_t gyroscope = yGyroscopeHighByte<<8|yGyroscopeLowByte;
mitea1 0:f2815503561f 101
mitea1 0:f2815503561f 102 return ((float) gyroscope)/config->getGyroDivider();
mitea1 0:f2815503561f 103 }
mitea1 0:f2815503561f 104
mitea1 0:f2815503561f 105 float MPU9250::getZAxisGyro(){
mitea1 0:f2815503561f 106 uint8_t zGyroscopeHighByte;
mitea1 0:f2815503561f 107 uint8_t zGyroscopeLowByte;
mitea1 0:f2815503561f 108
mitea1 0:f2815503561f 109 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_GYRO_ZOUT_H,0,
mitea1 0:f2815503561f 110 &zGyroscopeHighByte,1);
mitea1 0:f2815503561f 111 i2c->read_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_GYRO_ZOUT_L,0,
mitea1 0:f2815503561f 112 &zGyroscopeLowByte,1);
mitea1 0:f2815503561f 113
mitea1 0:f2815503561f 114 int16_t gyroscope = zGyroscopeHighByte<<8|zGyroscopeLowByte;
mitea1 0:f2815503561f 115
mitea1 0:f2815503561f 116 return ((float) gyroscope)/config->getGyroDivider();
mitea1 0:f2815503561f 117 }
mitea1 0:f2815503561f 118
mitea1 0:f2815503561f 119 float MPU9250::getXAxisTesla(){
mitea1 0:f2815503561f 120 uint8_t xTelsaHighByte;
mitea1 0:f2815503561f 121 uint8_t xTelsaLowByte;
mitea1 0:f2815503561f 122
mitea1 0:f2815503561f 123 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_XOUT_H,false,
mitea1 0:f2815503561f 124 &xTelsaHighByte,1);
mitea1 0:f2815503561f 125 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_XOUT_L,false,
mitea1 0:f2815503561f 126 &xTelsaLowByte,1);
mitea1 0:f2815503561f 127
mitea1 0:f2815503561f 128 uint8_t status;
mitea1 0:f2815503561f 129
mitea1 0:f2815503561f 130 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_ST2,false,
mitea1 0:f2815503561f 131 &status,1);
mitea1 0:f2815503561f 132
mitea1 0:f2815503561f 133 int16_t tesla = xTelsaHighByte<<8|xTelsaLowByte;
mitea1 0:f2815503561f 134
mitea1 0:f2815503561f 135 return (float) (tesla) / config->getTeslaDivider();
mitea1 0:f2815503561f 136 }
mitea1 0:f2815503561f 137
mitea1 0:f2815503561f 138 float MPU9250::getYAxisTesla(){
mitea1 0:f2815503561f 139 uint8_t yTelsaHighByte;
mitea1 0:f2815503561f 140 uint8_t yTelsaLowByte;
mitea1 0:f2815503561f 141
mitea1 0:f2815503561f 142 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_YOUT_H,false,
mitea1 0:f2815503561f 143 &yTelsaHighByte,1);
mitea1 0:f2815503561f 144 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_YOUT_L,false,
mitea1 0:f2815503561f 145 &yTelsaLowByte,1);
mitea1 0:f2815503561f 146
mitea1 0:f2815503561f 147 uint8_t status;
mitea1 0:f2815503561f 148
mitea1 0:f2815503561f 149 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_ST2,false,
mitea1 0:f2815503561f 150 &status,1);
mitea1 0:f2815503561f 151
mitea1 0:f2815503561f 152 int16_t tesla = yTelsaHighByte<<8|yTelsaLowByte;
mitea1 0:f2815503561f 153
mitea1 0:f2815503561f 154 return (float) (tesla) / config->getTeslaDivider();
mitea1 0:f2815503561f 155 }
mitea1 0:f2815503561f 156
mitea1 0:f2815503561f 157 float MPU9250::getZAxisTesla(){
mitea1 0:f2815503561f 158 uint8_t zTelsaHighByte;
mitea1 0:f2815503561f 159 uint8_t zTelsaLowByte;
mitea1 0:f2815503561f 160
mitea1 0:f2815503561f 161 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_ZOUT_H,false,
mitea1 0:f2815503561f 162 &zTelsaHighByte,1);
mitea1 0:f2815503561f 163 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_ZOUT_L,false,
mitea1 0:f2815503561f 164 &zTelsaLowByte,1);
mitea1 0:f2815503561f 165
mitea1 0:f2815503561f 166 uint8_t status;
mitea1 0:f2815503561f 167
mitea1 0:f2815503561f 168 i2c->read_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_ST2,false,
mitea1 0:f2815503561f 169 &status,1);
mitea1 0:f2815503561f 170
mitea1 0:f2815503561f 171 int16_t tesla = zTelsaHighByte<<8|zTelsaLowByte;
mitea1 0:f2815503561f 172
mitea1 0:f2815503561f 173 return (float) (tesla) / config->getTeslaDivider();
mitea1 0:f2815503561f 174 }
mitea1 0:f2815503561f 175
mitea1 0:f2815503561f 176 void MPU9250::enableAxisAccelerationMeasurement(){
mitea1 0:f2815503561f 177 uint8_t configValueAcceleration=config->getAccelerometerScale()<<3;
mitea1 0:f2815503561f 178
mitea1 0:f2815503561f 179 i2c->write_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_ACCEL_CONFIG,false,
mitea1 0:f2815503561f 180 &configValueAcceleration,1);
mitea1 0:f2815503561f 181 }
mitea1 0:f2815503561f 182
mitea1 0:f2815503561f 183 void MPU9250::enableAxisGyroscopeMeasurement(){
mitea1 0:f2815503561f 184 uint8_t configValueGyroscope = config->getGyroscopeScale()<<3;
mitea1 0:f2815503561f 185
mitea1 0:f2815503561f 186 i2c->write_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_GYRO_CONFIG,false,
mitea1 0:f2815503561f 187 &configValueGyroscope,1);
mitea1 0:f2815503561f 188 }
mitea1 0:f2815503561f 189
mitea1 0:f2815503561f 190 void MPU9250::enableAxisTeslaMeasurement(){
mitea1 0:f2815503561f 191 uint8_t configValueMagnetometer = 0x02;
mitea1 0:f2815503561f 192
mitea1 0:f2815503561f 193 i2c->write_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_INT_PIN_CFG,false,
mitea1 0:f2815503561f 194 &configValueMagnetometer,1);
mitea1 0:f2815503561f 195
mitea1 0:f2815503561f 196 configValueMagnetometer = 0;
mitea1 0:f2815503561f 197 i2c->write_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_USER_CTRL,false,
mitea1 0:f2815503561f 198 &configValueMagnetometer,1);
mitea1 0:f2815503561f 199
mitea1 0:f2815503561f 200 configValueMagnetometer = 0;
mitea1 0:f2815503561f 201 i2c->write_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_CNTL1,false,
mitea1 0:f2815503561f 202 &configValueMagnetometer,1);
mitea1 0:f2815503561f 203
mitea1 0:f2815503561f 204 configValueMagnetometer = config->getMagnetometerBitResolution()<<4|
mitea1 0:f2815503561f 205 config->getMagnetometerMeasureMode();
mitea1 0:f2815503561f 206 i2c->write_RT(MPU9250_MAG_ADDRESS,MPU9250_MAG_CNTL1,false,
mitea1 0:f2815503561f 207 &configValueMagnetometer,1);
mitea1 0:f2815503561f 208
mitea1 0:f2815503561f 209 }
mitea1 0:f2815503561f 210
mitea1 0:f2815503561f 211 void MPU9250::configureInterrupts(){
mitea1 0:f2815503561f 212 uint8_t configValueInterruptPin = config->getInterruptPinConfiguration()|0x02;
mitea1 0:f2815503561f 213
mitea1 0:f2815503561f 214 i2c->write_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_INT_PIN_CFG,false,
mitea1 0:f2815503561f 215 &configValueInterruptPin,1);
mitea1 0:f2815503561f 216
mitea1 0:f2815503561f 217 uint8_t configValueInterruptEnable = config->getInterruptEnableConfiguration();
mitea1 0:f2815503561f 218
mitea1 0:f2815503561f 219 i2c->write_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_INT_ENABLE,false,
mitea1 0:f2815503561f 220 &configValueInterruptEnable,1);
mitea1 0:f2815503561f 221 }
mitea1 0:f2815503561f 222
mitea1 0:f2815503561f 223 void MPU9250::setWakeOnReceiveThreshold(){
mitea1 0:f2815503561f 224 uint8_t wakeOnReceiveThreshold = config->getWakeOnMotionThreshold();
mitea1 0:f2815503561f 225
mitea1 0:f2815503561f 226 i2c->write_RT(MPU9250_DEFAULT_ADDRESS,MPU9250_WOM_THR,false,
mitea1 0:f2815503561f 227 &wakeOnReceiveThreshold,1);
mitea1 0:f2815503561f 228 }
mitea1 0:f2815503561f 229
mitea1 0:f2815503561f 230