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
Diff: eCompass_Lib.cpp
- Revision:
- 3:98d426530167
- Child:
- 4:3842f7654e34
--- /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(); +}