Library for getting temperature and pressure values from Bosch BMP180 barometer.
Fork of BMP180 by
Diff: BMP180.cpp
- Revision:
- 3:0e92710a46f9
- Parent:
- 2:79d0d565c3af
--- a/BMP180.cpp Fri Mar 13 18:44:57 2015 +0000 +++ b/BMP180.cpp Sat Mar 14 12:57:44 2015 +0000 @@ -39,9 +39,11 @@ char MSB = readByteFromRegister(0xF6); char LSB = readByteFromRegister(0xF7); // combine in 16-bit value - int UT = (MSB << 8) | LSB; - //int32_t UT = 27898; // test data from datasheet - //printf("\n\nUT = %d\n",UT); + int UT = (MSB << 8) | LSB; +#ifdef DEBUG + UT = 27898; // test data from datasheet + printf("****DEBUG MODE****\nUT = %d\n",UT); +#endif return UT; } @@ -55,12 +57,12 @@ char MSB = readByteFromRegister(0xF6); char LSB = readByteFromRegister(0xF7); char XLSB = readByteFromRegister(0xF7); - // just do 16-bit, not 19-bit - //int UP = (MSB << 16 | LSB << 8 | XLSB) >> (8 - oss); - int UP = (MSB << 16 | LSB << 8) >> (8 - oss); - - //int32_t UP = 23843; // test data from datasheet - //printf("UP = %d\n",UP); + int UP = (MSB << 16 | LSB << 8 | XLSB) >> (8 - oss); + +#ifdef DEBUG + UP = 23843; // test data from datasheet + printf("UP = %d\n",UP); +#endif return UP; } @@ -71,7 +73,9 @@ X2 = (calibration.MC << 11) / (X1 + calibration.MD); B5 = X1 + X2; int32_t T = (B5 + 8) >> 4; - //printf("X1=%d\nX2=%d\nB5=%d\n*****\nT=%d\n******\n",X1,X2,B5,T); +#ifdef DEBUG + printf("****\nX1=%d\nX2=%d\nB5=%d\nT=%d\n",X1,X2,B5,T); +#endif return T; } @@ -79,34 +83,49 @@ { // equations from data sheet B6 = B5 - 4000; - //printf("\n********\nB6=%d\n",B6); X1 = (calibration.B2 * ((B6*B6) >> 12))>>11; X2 = (calibration.AC2*B6)>>11; X3 = X1 + X2; B3 = (((calibration.AC1*4 + X3) << oss)+2)/4; - //printf("X1=%d\nX2=%d\nX3=%d\nB3=%d\n",X1,X2,X3,B3); +#ifdef DEBUG + printf("*****\nB6=%d\nX1=%d\nX2=%d\nX3=%d\nB3=%d\n",B6,X1,X2,X3,B3); +#endif X1 = (calibration.AC3*B6)>>13; X2 = (calibration.B1*((B6*B6)>>12))>>16; X3 = ((X1+X2)+2)/4; B4 = (calibration.AC4*(uint32_t)(X3+32768))>>15; - //printf("X1=%d\nX2=%d\nX3=%d\nB4=%u\n",X1,X2,X3,B4); +#ifdef DEBUG + printf("X1=%d\nX2=%d\nX3=%d\nB4=%u\n",X1,X2,X3,B4); +#endif B7 = ((uint32_t)UP - B3)*(50000>>oss); - //printf("B7=%u\n",B7); +#ifdef DEBUG + printf("B7=%u\n",B7); +#endif int32_t P; if (B7 < 0x80000000) P = (B7*2)/B4; else P = (B7/B4)*2; - //printf("P=%d\n",P); +#ifdef DEBUG + printf("P=%d\n",P); +#endif X1 = (P>>8)*(P>>8); - //printf("X1=%d\n",X1); +#ifdef DEBUG + printf("X1=%d\n",X1); +#endif X1 = (X1*3038)>>16; - //printf("X1=%d\n",X1); +#ifdef DEBUG + printf("X1=%d\n",X1); +#endif X2 = (-7357*P)>>16; - //printf("X2=%d\n",X2); +#ifdef DEBUG + printf("X2=%d\n",X2); +#endif P = P + (X1+X2+3791)/16; - //printf("P=%d\n",P); - +#ifdef DEBUG + printf("P=%d\n",P); +#endif + return P; } @@ -120,17 +139,22 @@ if (data != 0x55) { // if correct ID not found, hang and flash error message error(); } - + readCalibrationData(); + oss = 1; // standard power oversampling setting - //oss = 0; // used when testing data sheet example + +#ifdef DEBUG + oss = 0; // used when testing data sheet example +#endif + } // Reads factory calibrated data void BMP180::readCalibrationData() { - + char eeprom[22]; readBytesFromRegister(EEPROM_REG_ADD,22,eeprom); @@ -146,13 +170,25 @@ calibration.MB = (int16_t) (eeprom[16] << 8) | eeprom[17]; calibration.MC = (int16_t) (eeprom[18] << 8) | eeprom[19]; calibration.MD = (int16_t) (eeprom[20] << 8) | eeprom[21]; - + // test data from data sheet - //calibration.AC1 = 408;calibration.AC2 = -72;calibration.AC3 = -14383;calibration.AC4 = 32741;calibration.AC5 = 32757; - //calibration.AC6 = 23153;calibration.B1 = 6190;calibration.B2 = 4;calibration.MB = -32768;calibration.MC = -8711;calibration.MD = 2868; - //printf("AC1=%d\nAC2=%d\nAC3=%d\nAC4=%u\nAC5=%u\nAC6=%u\nB1=%d\nB2=%d\nMB=%d\nMC=%d\nMD=%d\n", - // calibration.AC1,calibration.AC2,calibration.AC3,calibration.AC4,calibration.AC5,calibration.AC6, - // calibration.B1,calibration.B2,calibration.MB,calibration.MC,calibration.MD); +#ifdef DEBUG + calibration.AC1 = 408; + calibration.AC2 = -72; + calibration.AC3 = -14383; + calibration.AC4 = 32741; + calibration.AC5 = 32757; + calibration.AC6 = 23153; + calibration.B1 = 6190; + calibration.B2 = 4; + calibration.MB = -32768; + calibration.MC = -8711; + calibration.MD = 2868; + printf("****EXAMPLE CALIBRATION DATA****\n"); + printf("AC1=%d\nAC2=%d\nAC3=%d\nAC4=%u\nAC5=%u\nAC6=%u\nB1=%d\nB2=%d\nMB=%d\nMC=%d\nMD=%d\n", + calibration.AC1,calibration.AC2,calibration.AC3,calibration.AC4,calibration.AC5,calibration.AC6, + calibration.B1,calibration.B2,calibration.MB,calibration.MC,calibration.MD); +#endif }