BMP085 Sparkfun class
BMP085.cpp
- Committer:
- mr63
- Date:
- 2013-10-02
- Revision:
- 0:2ae3dabe45e8
File content as of revision 0:2ae3dabe45e8:
#include "BMP085.h" I2C i2c(p28, p27); int _SlaveA; //local variable that holds the Slave Address int AC1,AC2,AC3,B1,B2,MB,MC,MD; int AC4,AC5,AC6; long B5; char _SensorData[8] ={100,100,100}; //Char array that holds the current Altitude and Temperature dat //BMP085 Class Constructor BMP085::BMP085 (int SlaveAddress, PinName sda, PinName scl, PinName EOC) : _i2c(sda,scl), _eoc(EOC) { _eoc.mode(PullUp); _SlaveA = SlaveAddress; } int BMP085::Write_Register (char regnum, char data) //Used for writing data to the BMP085 Registers { char Write_Data[2]; Write_Data[0] = regnum; Write_Data[1] = data; return(_i2c.write(_SlaveA, Write_Data, 2)); } int BMP085::Read_Register (char regnum, int numbofbytes) // { char Write_Data[1]; Write_Data[0] = regnum; _i2c.write(_SlaveA, Write_Data, 1,true); _i2c.read(_SlaveA, _SensorData, numbofbytes); return(1); } int BMP085::Read_ConversionValue(unsigned char type) // { Write_Register(0xF4,type); for(int t=0; t<5000;t++); while(!_eoc); Read_Register(0xF6,2); return (((int)_SensorData[0]*256+_SensorData[1])); } void BMP085::GetCalibrationData() { AC1=(int)return16bit(0xAA); AC2=(int)return16bit(0xAC); AC3=(int)return16bit(0xAE); AC4=return16bit(0xB0); AC5=return16bit(0xB2); AC6=return16bit(0xB4); B1=(int)return16bit(0xB6); B2=(int)return16bit(0xB8); MB=(int)return16bit(0xBA); MC=(int)return16bit(0xBC); MD=(int)return16bit(0xBE); } int BMP085::return16bit(int Reg) //Read Data Register from MPL3115A2 Sensor { Read_Register(Reg,2); return ((int)(_SensorData[0]*256+_SensorData[1])); } int BMP085::calculate_tempc() { long X1; long X2; int tempin; tempin=Read_ConversionValue(Temp); if(tempin>0) { X1=(long)((long)tempin-AC6)*AC5/32768; X2=(long)MC*2048/(X1+MD); B5=X1+X2; return((B5+8)/16); //return(tempin); } return (0); } int BMP085::calculate_pressure() { long B6, X1,X2,X3,B3,P; unsigned long B4,B7; int presin; presin=Read_ConversionValue(Pressure); if(presin>0) { B6=B5-4000; X1=(B2*(B6*B6/4096))/2048; X2=AC2*B6/2048; X3=X1+X2; B3=(AC1*4+X3)/4; X1=(long)AC3*B6/8192; X2=((long)B1*(B6*B6/4096))/65536; X3=((X1+X2)+2)/4; B4=(long)AC4*(X3+32768)/32768; B7=((long)presin-B3)*(50000); if(B7<0X80000000) { P=(B7*2)/B4; } else { P = (B7/B4)*2; } X1 = (P/256)*(P/256); X1 = (X1*3038)/65536; X2 = (-7357*P)/65536; P=P + (X1 + X2 + 3792)/16; P=P/1000; return ((int)P); } return(0); }