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:13:59 2014 +0000
Revision:
5:1b8ec4e7687b
Parent:
3:98d426530167
Child:
6:a161cb3bd061
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 3:98d426530167 19 }
JimCarver 3:98d426530167 20
JimCarver 3:98d426530167 21
JimCarver 3:98d426530167 22 //eCompass::~eCompass() { }
JimCarver 3:98d426530167 23
JimCarver 5:1b8ec4e7687b 24 void eCompass::run(MotionSensorDataCounts &acc_raw, MotionSensorDataCounts &mag_raw)
JimCarver 3:98d426530167 25 {
JimCarver 3:98d426530167 26 axis6.timestamp = tcount;
JimCarver 5:1b8ec4e7687b 27 hal_map( &acc_raw, &mag_raw);
JimCarver 3:98d426530167 28 //
JimCarver 3:98d426530167 29 // raw data
JimCarver 5:1b8ec4e7687b 30 axis6.acc_x = acc_raw.x;
JimCarver 5:1b8ec4e7687b 31 axis6.acc_y = acc_raw.y;
JimCarver 5:1b8ec4e7687b 32 axis6.acc_z = acc_raw.z;
JimCarver 5:1b8ec4e7687b 33 axis6.mag_x = mag_raw.x;
JimCarver 5:1b8ec4e7687b 34 axis6.mag_y = mag_raw.y;
JimCarver 5:1b8ec4e7687b 35 axis6.mag_z = mag_raw.z;
JimCarver 3:98d426530167 36 //
JimCarver 3:98d426530167 37 // raw data converted to floating ouing
JimCarver 5:1b8ec4e7687b 38 axis6.fax = (float) acc_raw.x;
JimCarver 5:1b8ec4e7687b 39 axis6.fay = (float) acc_raw.y;
JimCarver 5:1b8ec4e7687b 40 axis6.faz = (float) acc_raw.z;
JimCarver 5:1b8ec4e7687b 41 axis6.fmx = (float) mag_raw.x;
JimCarver 5:1b8ec4e7687b 42 axis6.fmy = (float) mag_raw.y;
JimCarver 5:1b8ec4e7687b 43 axis6.fmz = (float) mag_raw.z;
JimCarver 3:98d426530167 44 //
JimCarver 3:98d426530167 45 // Accelerometer data converted to Gs
JimCarver 5:1b8ec4e7687b 46 axis6.fGax = ((float) acc_raw.x) / 4096.0f;
JimCarver 5:1b8ec4e7687b 47 axis6.fGay = ((float) acc_raw.y) / 4096.0f;
JimCarver 5:1b8ec4e7687b 48 axis6.fGaz = ((float) acc_raw.z) / 4096.0f;
JimCarver 3:98d426530167 49 //
JimCarver 3:98d426530167 50 // Magnetometer data converted to microteslas
JimCarver 5:1b8ec4e7687b 51 axis6.fUTmx = ((float) mag_raw.x) / 10.0f;
JimCarver 5:1b8ec4e7687b 52 axis6.fUTmy = ((float) mag_raw.y) / 10.0f;
JimCarver 5:1b8ec4e7687b 53 axis6.fUTmz = ((float) mag_raw.z) / 10.0f;
JimCarver 3:98d426530167 54 //printf("r");
JimCarver 3:98d426530167 55 if(!cdebug) run_eCompass();
JimCarver 3:98d426530167 56 }
JimCarver 3:98d426530167 57
JimCarver 5:1b8ec4e7687b 58
JimCarver 3:98d426530167 59 void eCompass::calibrate(void) {
JimCarver 3:98d426530167 60 calibrate_eCompass();
JimCarver 3:98d426530167 61 }
JimCarver 5:1b8ec4e7687b 62
JimCarver 3:98d426530167 63 void eCompass::init(void) {
JimCarver 3:98d426530167 64 init_eCompass();
JimCarver 3:98d426530167 65 }