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:
Sun Apr 13 22:15:34 2014 +0000
Revision:
4:45d9f1e8277c
Parent:
3:98d426530167
Child:
6:a161cb3bd061
Improved initalization, default compass type is NED, can be overridden in user code to compass_type=ANDROID_COMPASS or compass_type=WINDOWS_COMPASS

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 3:98d426530167 8 extern void hal_map(int16_t * acc_raw, int16_t * 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 3:98d426530167 27 void eCompass::run(int16_t * acc_raw, int16_t * mag_raw)
JimCarver 3:98d426530167 28 {
JimCarver 3:98d426530167 29 axis6.timestamp = tcount;
JimCarver 3:98d426530167 30 hal_map(acc_raw, mag_raw);
JimCarver 3:98d426530167 31 //
JimCarver 3:98d426530167 32 // raw data
JimCarver 3:98d426530167 33 axis6.acc_x = acc_raw[0];
JimCarver 3:98d426530167 34 axis6.acc_y = acc_raw[1];
JimCarver 3:98d426530167 35 axis6.acc_z = acc_raw[2];
JimCarver 3:98d426530167 36 axis6.mag_x = mag_raw[0];
JimCarver 3:98d426530167 37 axis6.mag_y = mag_raw[1];
JimCarver 3:98d426530167 38 axis6.mag_z = mag_raw[2];
JimCarver 3:98d426530167 39 //
JimCarver 3:98d426530167 40 // raw data converted to floating ouing
JimCarver 3:98d426530167 41 axis6.fax = (float) acc_raw[0];
JimCarver 3:98d426530167 42 axis6.fay = (float) acc_raw[1];
JimCarver 3:98d426530167 43 axis6.faz = (float) acc_raw[2];
JimCarver 3:98d426530167 44 axis6.fmx = (float) mag_raw[0];
JimCarver 3:98d426530167 45 axis6.fmy = (float) mag_raw[1];
JimCarver 3:98d426530167 46 axis6.fmz = (float) mag_raw[2];
JimCarver 3:98d426530167 47 //
JimCarver 3:98d426530167 48 // Accelerometer data converted to Gs
JimCarver 3:98d426530167 49 axis6.fGax = ((float) acc_raw[0]) / 4096.0;
JimCarver 3:98d426530167 50 axis6.fGay = ((float) acc_raw[1]) / 4096.0;
JimCarver 3:98d426530167 51 axis6.fGaz = ((float) acc_raw[2]) / 4096.0;
JimCarver 3:98d426530167 52 //
JimCarver 3:98d426530167 53 // Magnetometer data converted to microteslas
JimCarver 3:98d426530167 54 axis6.fUTmx = ((float) mag_raw[0]) / 10.0;
JimCarver 3:98d426530167 55 axis6.fUTmy = ((float) mag_raw[1]) / 10.0;
JimCarver 3:98d426530167 56 axis6.fUTmz = ((float) mag_raw[2]) / 10.0;
JimCarver 3:98d426530167 57 //printf("r");
JimCarver 3:98d426530167 58 if(!cdebug) run_eCompass();
JimCarver 3:98d426530167 59 }
JimCarver 3:98d426530167 60
JimCarver 3:98d426530167 61 void eCompass::calibrate(void) {
JimCarver 3:98d426530167 62 calibrate_eCompass();
JimCarver 3:98d426530167 63 }
JimCarver 3:98d426530167 64
JimCarver 3:98d426530167 65 void eCompass::init(void) {
JimCarver 3:98d426530167 66 init_eCompass();
JimCarver 3:98d426530167 67 }