An eCompass library only for use on FPU enabled platforms like the K64F

Dependents:   K64F_eCompass_LCD rtos_compass K64F_eCompass GPS_6Axis_DataLogger_SD_UDP ... more

Fork of eCompass_Lib by Jim Carver

Revision:
3:98d426530167
Child:
4:3842f7654e34
diff -r 15ecb3c9d22f -r 98d426530167 eCompass_Lib.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eCompass_Lib.cpp	Sun Apr 13 21:23:57 2014 +0000
@@ -0,0 +1,64 @@
+#include "eCompass_Lib.h"
+
+
+extern void run_eCompass(void);
+extern void init_eCompass(void);
+extern void calibrate_eCompass(void);
+
+extern void hal_map(int16_t * acc_raw, int16_t * mag_raw);
+
+axis6_t axis6;
+uint32_t seconds;
+uint32_t compass_type;
+int32_t tcount;
+uint8_t cdebug;    
+eCompass::eCompass()
+{
+init_eCompass();
+cdebug = 0;
+}
+
+
+//eCompass::~eCompass() { }
+
+void eCompass::run(int16_t * acc_raw, int16_t * mag_raw)
+{
+    axis6.timestamp = tcount;
+    hal_map(acc_raw, mag_raw);
+    //
+    // raw data
+    axis6.acc_x = acc_raw[0];
+    axis6.acc_y = acc_raw[1];
+    axis6.acc_z = acc_raw[2];
+    axis6.mag_x = mag_raw[0];
+    axis6.mag_y = mag_raw[1];
+    axis6.mag_z = mag_raw[2];
+    //
+    // raw data converted to floating ouing
+    axis6.fax = (float) acc_raw[0];
+    axis6.fay = (float) acc_raw[1];
+    axis6.faz = (float) acc_raw[2];
+    axis6.fmx = (float) mag_raw[0];
+    axis6.fmy = (float) mag_raw[1];
+    axis6.fmz = (float) mag_raw[2];
+    //
+    // Accelerometer data converted to Gs
+    axis6.fGax = ((float) acc_raw[0]) / 4096.0;
+    axis6.fGay = ((float) acc_raw[1]) / 4096.0;
+    axis6.fGaz = ((float) acc_raw[2]) / 4096.0;
+    //
+    // Magnetometer data converted to microteslas
+    axis6.fUTmx = ((float) mag_raw[0]) / 10.0;
+    axis6.fUTmy = ((float) mag_raw[1]) / 10.0;
+    axis6.fUTmz = ((float) mag_raw[2]) / 10.0; 
+    //printf("r");
+    if(!cdebug) run_eCompass();
+    }
+   
+void eCompass::calibrate(void) {
+    calibrate_eCompass();
+}
+   
+void eCompass::init(void) {
+    init_eCompass();
+}