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

eCompass_Lib.cpp

Committer:
JimCarver
Date:
2014-04-13
Revision:
3:98d426530167
Child:
4:3842f7654e34

File content as of revision 3:98d426530167:

#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();
}