An fully working IMU-Filter and Sensor drivers for the 10DOF-Board over I2C. All in one simple class. Include, calibrate sensors, call read, get angles. (3D Visualisation code for Python also included) Sensors: L3G4200D, ADXL345, HMC5883, BMP085
IMU/IMU_10DOF.cpp@4:f62337b907e5, 2013-08-29 (annotated)
- Committer:
- maetugr
- Date:
- Thu Aug 29 13:52:30 2013 +0000
- Revision:
- 4:f62337b907e5
- Parent:
- 1:798db5deb8b9
The Altitude Sensor is now implemented, it's really 10DOF now ;); TODO: Autocalibration
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
maetugr | 1:798db5deb8b9 | 1 | #include "IMU_10DOF.h" |
maetugr | 1:798db5deb8b9 | 2 | |
maetugr | 4:f62337b907e5 | 3 | IMU_10DOF::IMU_10DOF(PinName sda, PinName scl) : Gyro(sda, scl), Acc(sda, scl), Comp(sda, scl), Alt(sda,scl) |
maetugr | 1:798db5deb8b9 | 4 | { |
maetugr | 1:798db5deb8b9 | 5 | dt = 0; |
maetugr | 1:798db5deb8b9 | 6 | dt_sensors = 0; |
maetugr | 1:798db5deb8b9 | 7 | time_for_dt = 0; |
maetugr | 1:798db5deb8b9 | 8 | time_for_dt_sensors = 0; |
maetugr | 4:f62337b907e5 | 9 | |
maetugr | 4:f62337b907e5 | 10 | angle = Filter.angle; // initialize array pointer |
maetugr | 1:798db5deb8b9 | 11 | |
maetugr | 1:798db5deb8b9 | 12 | LocalTimer.start(); |
maetugr | 1:798db5deb8b9 | 13 | } |
maetugr | 1:798db5deb8b9 | 14 | |
maetugr | 4:f62337b907e5 | 15 | void IMU_10DOF::readAngles() |
maetugr | 1:798db5deb8b9 | 16 | { |
maetugr | 1:798db5deb8b9 | 17 | time_for_dt_sensors = LocalTimer.read(); // start time for measuring sensors |
maetugr | 1:798db5deb8b9 | 18 | Gyro.read(); // reading sensor data |
maetugr | 1:798db5deb8b9 | 19 | Acc.read(); |
maetugr | 1:798db5deb8b9 | 20 | Comp.read(); |
maetugr | 1:798db5deb8b9 | 21 | dt_sensors = LocalTimer.read() - time_for_dt_sensors; // stop time for measuring sensors |
maetugr | 1:798db5deb8b9 | 22 | |
maetugr | 1:798db5deb8b9 | 23 | // meassure dt for the filter |
maetugr | 1:798db5deb8b9 | 24 | dt = LocalTimer.read() - time_for_dt; // time in s since last loop |
maetugr | 1:798db5deb8b9 | 25 | time_for_dt = LocalTimer.read(); // set new time for next measurement |
maetugr | 1:798db5deb8b9 | 26 | |
maetugr | 1:798db5deb8b9 | 27 | Filter.compute(dt, Gyro.data, Acc.data, Comp.data); |
maetugr | 4:f62337b907e5 | 28 | } |
maetugr | 4:f62337b907e5 | 29 | |
maetugr | 4:f62337b907e5 | 30 | void IMU_10DOF::readAltitude() |
maetugr | 4:f62337b907e5 | 31 | { |
maetugr | 4:f62337b907e5 | 32 | Alt.read(); |
maetugr | 4:f62337b907e5 | 33 | temperature = Alt.Temperature; // copy all resulting measurements |
maetugr | 4:f62337b907e5 | 34 | pressure = Alt.Pressure; |
maetugr | 4:f62337b907e5 | 35 | altitude = Alt.Altitude; |
maetugr | 1:798db5deb8b9 | 36 | } |