Improved eCompass with support for different sensor options and a new C++ wrapper

Dependents:   KL46_eCompass KL46_eCompass_TiltCompensed_Acel-Mag Ragnarok_2ejes compass_acc ... more

Fork of Wi-Go_eCompass_Lib_V3 by Jim Carver

Committer:
JimCarver
Date:
Fri May 16 18:18:42 2014 +0000
Revision:
6:a161cb3bd061
Parent:
5:1b8ec4e7687b
Parent:
4:45d9f1e8277c
Implements new virtual MotionSensor class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 3:98d426530167 1 #include "eCompass_Lib.h"
JimCarver 3:98d426530167 2
JimCarver 3:98d426530167 3
JimCarver 3:98d426530167 4 extern void run_eCompass(void);
JimCarver 3:98d426530167 5 extern void init_eCompass(void);
JimCarver 3:98d426530167 6 extern void calibrate_eCompass(void);
JimCarver 3:98d426530167 7
JimCarver 5:1b8ec4e7687b 8 extern void hal_map(MotionSensorDataCounts * acc_raw, MotionSensorDataCounts * mag_raw);
JimCarver 3:98d426530167 9
JimCarver 3:98d426530167 10 axis6_t axis6;
JimCarver 3:98d426530167 11 uint32_t seconds;
JimCarver 3:98d426530167 12 uint32_t compass_type;
JimCarver 3:98d426530167 13 int32_t tcount;
JimCarver 3:98d426530167 14 uint8_t cdebug;
JimCarver 3:98d426530167 15 eCompass::eCompass()
JimCarver 3:98d426530167 16 {
JimCarver 3:98d426530167 17 init_eCompass();
JimCarver 3:98d426530167 18 cdebug = 0;
JimCarver 4:45d9f1e8277c 19 compass_type = NED_COMPASS; // default type is NED
JimCarver 4:45d9f1e8277c 20 tcount = 0;
JimCarver 4:45d9f1e8277c 21 seconds = 0;
JimCarver 3:98d426530167 22 }
JimCarver 3:98d426530167 23
JimCarver 3:98d426530167 24
JimCarver 3:98d426530167 25 //eCompass::~eCompass() { }
JimCarver 3:98d426530167 26
JimCarver 5:1b8ec4e7687b 27 void eCompass::run(MotionSensorDataCounts &acc_raw, MotionSensorDataCounts &mag_raw)
JimCarver 3:98d426530167 28 {
JimCarver 3:98d426530167 29 axis6.timestamp = tcount;
JimCarver 5:1b8ec4e7687b 30 hal_map( &acc_raw, &mag_raw);
JimCarver 3:98d426530167 31 //
JimCarver 3:98d426530167 32 // raw data
JimCarver 5:1b8ec4e7687b 33 axis6.acc_x = acc_raw.x;
JimCarver 5:1b8ec4e7687b 34 axis6.acc_y = acc_raw.y;
JimCarver 5:1b8ec4e7687b 35 axis6.acc_z = acc_raw.z;
JimCarver 5:1b8ec4e7687b 36 axis6.mag_x = mag_raw.x;
JimCarver 5:1b8ec4e7687b 37 axis6.mag_y = mag_raw.y;
JimCarver 5:1b8ec4e7687b 38 axis6.mag_z = mag_raw.z;
JimCarver 3:98d426530167 39 //
JimCarver 3:98d426530167 40 // raw data converted to floating ouing
JimCarver 5:1b8ec4e7687b 41 axis6.fax = (float) acc_raw.x;
JimCarver 5:1b8ec4e7687b 42 axis6.fay = (float) acc_raw.y;
JimCarver 5:1b8ec4e7687b 43 axis6.faz = (float) acc_raw.z;
JimCarver 5:1b8ec4e7687b 44 axis6.fmx = (float) mag_raw.x;
JimCarver 5:1b8ec4e7687b 45 axis6.fmy = (float) mag_raw.y;
JimCarver 5:1b8ec4e7687b 46 axis6.fmz = (float) mag_raw.z;
JimCarver 3:98d426530167 47 //
JimCarver 3:98d426530167 48 // Accelerometer data converted to Gs
JimCarver 5:1b8ec4e7687b 49 axis6.fGax = ((float) acc_raw.x) / 4096.0f;
JimCarver 5:1b8ec4e7687b 50 axis6.fGay = ((float) acc_raw.y) / 4096.0f;
JimCarver 5:1b8ec4e7687b 51 axis6.fGaz = ((float) acc_raw.z) / 4096.0f;
JimCarver 3:98d426530167 52 //
JimCarver 3:98d426530167 53 // Magnetometer data converted to microteslas
JimCarver 5:1b8ec4e7687b 54 axis6.fUTmx = ((float) mag_raw.x) / 10.0f;
JimCarver 5:1b8ec4e7687b 55 axis6.fUTmy = ((float) mag_raw.y) / 10.0f;
JimCarver 5:1b8ec4e7687b 56 axis6.fUTmz = ((float) mag_raw.z) / 10.0f;
JimCarver 3:98d426530167 57 //printf("r");
JimCarver 3:98d426530167 58 if(!cdebug) run_eCompass();
JimCarver 3:98d426530167 59 }
JimCarver 3:98d426530167 60
JimCarver 5:1b8ec4e7687b 61
JimCarver 3:98d426530167 62 void eCompass::calibrate(void) {
JimCarver 3:98d426530167 63 calibrate_eCompass();
JimCarver 3:98d426530167 64 }
JimCarver 5:1b8ec4e7687b 65
JimCarver 3:98d426530167 66 void eCompass::init(void) {
JimCarver 3:98d426530167 67 init_eCompass();
JimCarver 3:98d426530167 68 }