MPL3115A2 Altitude/Pressure Sensor

Committer:
mr63
Date:
Fri Aug 16 13:18:19 2013 +0000
Revision:
0:67dffed9369b
This is an Easy to use, easy to understand library to work with the MPL3115A2 Altitude/Pressure Sensor that can be purchased from Sparkfun.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mr63 0:67dffed9369b 1
mr63 0:67dffed9369b 2 #include "mbed.h"
mr63 0:67dffed9369b 3 #include "MPL3115A2.h"
mr63 0:67dffed9369b 4
mr63 0:67dffed9369b 5
mr63 0:67dffed9369b 6 int _SlaveA; //local variable that holds the Slave Address
mr63 0:67dffed9369b 7 char _SensorData[8]; //Char array that holds the current Altitude and Temperature data
mr63 0:67dffed9369b 8
mr63 0:67dffed9369b 9 //MPL3115A2 Class Constructor
mr63 0:67dffed9369b 10 MPL3115A2::MPL3115A2(int SlaveAddress, PinName pin1, PinName pin2, PinName pin3, PinName pin4) : _i2c(pin1,pin2), _pin1(pin3),_pin2(pin4)
mr63 0:67dffed9369b 11 {
mr63 0:67dffed9369b 12 _pin1.mode(PullUp);
mr63 0:67dffed9369b 13 _pin2.mode(PullUp);
mr63 0:67dffed9369b 14 _SlaveA = SlaveAddress;
mr63 0:67dffed9369b 15
mr63 0:67dffed9369b 16 }
mr63 0:67dffed9369b 17
mr63 0:67dffed9369b 18 int MPL3115A2::Write_Register (char regnum, char data) //Used for writing data to the MPL3115A2 Registers
mr63 0:67dffed9369b 19 {
mr63 0:67dffed9369b 20 char Write_Data[2];
mr63 0:67dffed9369b 21 Write_Data[0] = regnum;
mr63 0:67dffed9369b 22 Write_Data[1] = data;
mr63 0:67dffed9369b 23 return(_i2c.write(_SlaveA, Write_Data, 2));
mr63 0:67dffed9369b 24 }
mr63 0:67dffed9369b 25
mr63 0:67dffed9369b 26 int MPL3115A2::Read_Altitude_Data() //Read Data Register from MPL3115A2 Sensor
mr63 0:67dffed9369b 27 {
mr63 0:67dffed9369b 28 char Start_Register [] = {0x01};
mr63 0:67dffed9369b 29 _i2c.write(_SlaveA, Start_Register, 1,true);
mr63 0:67dffed9369b 30 return(_i2c.read(_SlaveA, _SensorData, 5));
mr63 0:67dffed9369b 31
mr63 0:67dffed9369b 32 }
mr63 0:67dffed9369b 33
mr63 0:67dffed9369b 34 bool MPL3115A2::get_int1 () //Return state of Int1 pin
mr63 0:67dffed9369b 35 {
mr63 0:67dffed9369b 36 return(_pin1.read());
mr63 0:67dffed9369b 37 }
mr63 0:67dffed9369b 38
mr63 0:67dffed9369b 39 bool MPL3115A2::get_int2 () //Return state of Int2 pin
mr63 0:67dffed9369b 40 {
mr63 0:67dffed9369b 41 return(_pin2.read());
mr63 0:67dffed9369b 42 }
mr63 0:67dffed9369b 43
mr63 0:67dffed9369b 44 float MPL3115A2::Altitude_ft () //Return Altitude in Feet
mr63 0:67dffed9369b 45 {
mr63 0:67dffed9369b 46 return((((_SensorData[2]>>4)/128.0)+ (_SensorData[0]*256+_SensorData[1]))*3.28);
mr63 0:67dffed9369b 47 }
mr63 0:67dffed9369b 48
mr63 0:67dffed9369b 49 float MPL3115A2::Altitude_m () //Return Altitude in meters
mr63 0:67dffed9369b 50 {
mr63 0:67dffed9369b 51 return((((_SensorData[2]>>4)/128.0)+ (_SensorData[0]*256+_SensorData[1])));
mr63 0:67dffed9369b 52 }
mr63 0:67dffed9369b 53
mr63 0:67dffed9369b 54 float MPL3115A2::Temp_F () //Return Temp in Degrees F
mr63 0:67dffed9369b 55 {
mr63 0:67dffed9369b 56 return(((_SensorData[4]>>4)/128.0+(float)_SensorData[3])*(1.8)+32.0);
mr63 0:67dffed9369b 57 }
mr63 0:67dffed9369b 58
mr63 0:67dffed9369b 59 float MPL3115A2::Temp_C () //Return Temp in Degrees C
mr63 0:67dffed9369b 60 {
mr63 0:67dffed9369b 61 return(((_SensorData[4]>>4)/128.0+(float)_SensorData[3]));
mr63 0:67dffed9369b 62 }
mr63 0:67dffed9369b 63
mr63 0:67dffed9369b 64 int MPL3115A2::Init () //Initialize the MPL3115A2 in Alitude Interrupt Mode
mr63 0:67dffed9369b 65 {
mr63 0:67dffed9369b 66 int status = -1;
mr63 0:67dffed9369b 67 status = Write_Register(0x26,0xB8);
mr63 0:67dffed9369b 68
mr63 0:67dffed9369b 69 if(status==0)
mr63 0:67dffed9369b 70 {
mr63 0:67dffed9369b 71 status = -1;
mr63 0:67dffed9369b 72 status = Write_Register(0x13,0x07);
mr63 0:67dffed9369b 73 }
mr63 0:67dffed9369b 74
mr63 0:67dffed9369b 75 if(status==0)
mr63 0:67dffed9369b 76 {
mr63 0:67dffed9369b 77 status = -1;
mr63 0:67dffed9369b 78 status = Write_Register(0x2d,OFFSET);
mr63 0:67dffed9369b 79 }
mr63 0:67dffed9369b 80
mr63 0:67dffed9369b 81 if(status==0)
mr63 0:67dffed9369b 82 {
mr63 0:67dffed9369b 83 status = -1;
mr63 0:67dffed9369b 84 status = Write_Register(0x28,0x11);
mr63 0:67dffed9369b 85 }
mr63 0:67dffed9369b 86
mr63 0:67dffed9369b 87 if(status==0)
mr63 0:67dffed9369b 88 {
mr63 0:67dffed9369b 89 status = -1;
mr63 0:67dffed9369b 90 status = Write_Register(0x29,0x80);
mr63 0:67dffed9369b 91 }
mr63 0:67dffed9369b 92
mr63 0:67dffed9369b 93 if(status==0)
mr63 0:67dffed9369b 94 {
mr63 0:67dffed9369b 95 status = -1;
mr63 0:67dffed9369b 96 status = Write_Register(0x26,0xB9);
mr63 0:67dffed9369b 97 }
mr63 0:67dffed9369b 98 return(status);
mr63 0:67dffed9369b 99
mr63 0:67dffed9369b 100 }
mr63 0:67dffed9369b 101
mr63 0:67dffed9369b 102
mr63 0:67dffed9369b 103