MPL3115A2 Altitude/Pressure Sensor

MPL3115A2.cpp

Committer:
mr63
Date:
2013-08-16
Revision:
0:67dffed9369b

File content as of revision 0:67dffed9369b:


#include "mbed.h"
#include "MPL3115A2.h"


	int _SlaveA;					//local variable that holds the Slave Address
  char _SensorData[8];  //Char array that holds the current Altitude and Temperature data
	
	//MPL3115A2 Class Constructor
	MPL3115A2::MPL3115A2(int SlaveAddress, PinName pin1, PinName pin2, PinName pin3, PinName pin4) : _i2c(pin1,pin2), _pin1(pin3),_pin2(pin4)
	{
		_pin1.mode(PullUp);
		_pin2.mode(PullUp);
		_SlaveA = SlaveAddress;
		
	}

	int MPL3115A2::Write_Register (char regnum, char data)   //Used for writing data to the MPL3115A2 Registers
	{
		char Write_Data[2];
		Write_Data[0] = regnum;
		Write_Data[1] = data;
    return(_i2c.write(_SlaveA, Write_Data, 2));
	}
	
	int MPL3115A2::Read_Altitude_Data()		//Read Data Register from MPL3115A2 Sensor
	{
		char Start_Register [] = {0x01};
	  _i2c.write(_SlaveA, Start_Register, 1,true);
		return(_i2c.read(_SlaveA, _SensorData, 5));
		
	}
	
	bool MPL3115A2::get_int1 ()   //Return state of Int1 pin
	{
		return(_pin1.read());
	}
	
	bool MPL3115A2::get_int2 ()	  //Return state of Int2 pin
	{
		return(_pin2.read());
	}
	
	float MPL3115A2::Altitude_ft () //Return Altitude in Feet
	{
		return((((_SensorData[2]>>4)/128.0)+ (_SensorData[0]*256+_SensorData[1]))*3.28);
	}
	
	float MPL3115A2::Altitude_m ()	//Return Altitude in meters
	{
		return((((_SensorData[2]>>4)/128.0)+ (_SensorData[0]*256+_SensorData[1])));
	}
	
	float MPL3115A2::Temp_F ()		//Return Temp in Degrees F
	{
		return(((_SensorData[4]>>4)/128.0+(float)_SensorData[3])*(1.8)+32.0);
	}
	
	float MPL3115A2::Temp_C ()		//Return Temp in Degrees C
	{
		return(((_SensorData[4]>>4)/128.0+(float)_SensorData[3]));
	}
	
	int MPL3115A2::Init ()			//Initialize the MPL3115A2 in Alitude Interrupt Mode
	{
		  int status = -1;
	    status = Write_Register(0x26,0xB8);

			if(status==0)
			{
				status = -1;
				status = Write_Register(0x13,0x07);
			}
			
			if(status==0)
			{	    
				status = -1;
				status = Write_Register(0x2d,OFFSET);
			}
			
			if(status==0)
			{
				status = -1;
				status = Write_Register(0x28,0x11);
			}
			
			if(status==0)
			{	
				status = -1;
				status = Write_Register(0x29,0x80);
			}
			
			if(status==0)
			{	
				status = -1;
				status = Write_Register(0x26,0xB9);
			}
 	    return(status);
		
	}