NOT FINISHED YET!!! My first try to get a self built fully working Quadrocopter based on an mbed, a self built frame and some other more or less cheap parts.

Dependencies:   mbed MODI2C

Committer:
maetugr
Date:
Sat Dec 01 07:13:04 2012 +0000
Revision:
28:ba6ca9f4def4
Parent:
18:c8c09a3913ba
bevor eigener PID

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maetugr 14:cf260677ecde 1 #include "BMP085.h"
maetugr 14:cf260677ecde 2
maetugr 14:cf260677ecde 3 BMP085::BMP085(PinName sda, PinName scl) : I2C_Sensor(sda, scl, BMP085_I2C_ADDRESS)
maetugr 14:cf260677ecde 4 {
maetugr 14:cf260677ecde 5 // initialize BMP085 with settings
maetugr 14:cf260677ecde 6 //writeRegister(0xf4, 0x2e); // TODO: was macht das + register in header!
maetugr 14:cf260677ecde 7
maetugr 18:c8c09a3913ba 8 }
maetugr 18:c8c09a3913ba 9
maetugr 18:c8c09a3913ba 10 /*void BMP085::read()
maetugr 18:c8c09a3913ba 11 {
maetugr 18:c8c09a3913ba 12 long P, UTemp, UPressure, X1, X2, X3, B3, B5, B6;
maetugr 18:c8c09a3913ba 13 unsigned long B4, B7;
maetugr 18:c8c09a3913ba 14
maetugr 18:c8c09a3913ba 15 // TODO: writeRegister(0xf4, 0x2e); ?!!!
maetugr 18:c8c09a3913ba 16 twi_writechar(BMP085_ADRESS, 0xf4, 0x2e);
maetugr 18:c8c09a3913ba 17 // Wait at least 4.5ms
maetugr 18:c8c09a3913ba 18 wait(0.005);
maetugr 18:c8c09a3913ba 19 UTemp = twi_readshort(BMP085_ADRESS, 0xf6);
maetugr 18:c8c09a3913ba 20
maetugr 18:c8c09a3913ba 21 X1 = ((UTemp - AC6) * AC5) >> 15;
maetugr 18:c8c09a3913ba 22 X2 = (MC << 11) / (X1 + MD);
maetugr 18:c8c09a3913ba 23 B5 = X1 + X2;
maetugr 18:c8c09a3913ba 24 Temperature = (float)((B5 + 8) >> 4)/10.0;
maetugr 18:c8c09a3913ba 25
maetugr 18:c8c09a3913ba 26 twi_writechar(BMP085_ADRESS, 0xf4, 0x34 + (oss << 6));
maetugr 18:c8c09a3913ba 27 // Wait at least 4.5ms
maetugr 18:c8c09a3913ba 28 wait(0.005);
maetugr 18:c8c09a3913ba 29 UPressure = twi_readlong(BMP085_ADRESS, 0xf6) >> (8 - oss);
maetugr 18:c8c09a3913ba 30
maetugr 18:c8c09a3913ba 31 B6 = B5 - 4000;
maetugr 18:c8c09a3913ba 32 X1 = (B2 * (B6 * B6) >> 12) >> 11;
maetugr 18:c8c09a3913ba 33 X2 = (AC2 * B6) >> 11;
maetugr 18:c8c09a3913ba 34 X3 = X1 + X2;
maetugr 18:c8c09a3913ba 35 B3 = ((AC1 * 4 + X3) << oss) >> 2;
maetugr 18:c8c09a3913ba 36
maetugr 18:c8c09a3913ba 37 X1 = (AC3 * B6) >> 13;
maetugr 18:c8c09a3913ba 38 X2 = (B1 * (B6 * B6) >> 12) >> 16;
maetugr 18:c8c09a3913ba 39 X3 = ((X1 + X2) + 2) >> 2;
maetugr 18:c8c09a3913ba 40 B4 = AC4 * (X3 + 32768) >> 15;
maetugr 18:c8c09a3913ba 41
maetugr 18:c8c09a3913ba 42 B7 = (unsigned long)(UPressure - B3) * (50000 >> oss);
maetugr 18:c8c09a3913ba 43
maetugr 18:c8c09a3913ba 44 if (B7 < 0x80000000)
maetugr 18:c8c09a3913ba 45 {
maetugr 18:c8c09a3913ba 46 P = (2 * B7) / B4;
maetugr 18:c8c09a3913ba 47 }
maetugr 18:c8c09a3913ba 48 else
maetugr 18:c8c09a3913ba 49 {
maetugr 18:c8c09a3913ba 50 P = 2* (B7 / B4);
maetugr 18:c8c09a3913ba 51 }
maetugr 18:c8c09a3913ba 52 X1 = (P >> 8) * (P >> 8);
maetugr 18:c8c09a3913ba 53 X1 = (X1 * 3038) >> 16;
maetugr 18:c8c09a3913ba 54 X2 = (-7357 * P) >> 16;
maetugr 18:c8c09a3913ba 55 P = P + ((X1 + X2 + 3791) >> 4);
maetugr 18:c8c09a3913ba 56 Pressure = (float)P / 100.0;
maetugr 18:c8c09a3913ba 57 }*/