MPL3115A2 Altitude/Pressure Sensor
MPL3115A2.cpp@0:67dffed9369b, 2013-08-16 (annotated)
- 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?
User | Revision | Line number | New 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 |