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

Committer:
JimCarver
Date:
Mon May 05 17:38:37 2014 +0000
Revision:
6:37bc03c3b1f9
Parent:
3:98d426530167
Updated eCompass which conforms to the virtual MotionSensor class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 3:98d426530167 1 /************************************************************************************************
JimCarver 3:98d426530167 2 * File : eCompass.h
JimCarver 3:98d426530167 3 * Date : 18/07/2013
JimCarver 3:98d426530167 4 * Purpose : Wi-Go eCompass interface and hardware peripherals definition
JimCarver 3:98d426530167 5 * Author : Frank Vannieuwkerke
JimCarver 3:98d426530167 6 * Description: ported from Avnet Wi-Go code
JimCarver 3:98d426530167 7 * For additional information on Wi-Go please visit
JimCarver 3:98d426530167 8 * www.em.avnet.com/wi-go
JimCarver 3:98d426530167 9 * Additional info on the Freescale eCompass software is available at
JimCarver 3:98d426530167 10 * http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=E-Compass
JimCarver 3:98d426530167 11 ************************************************************************************************/
JimCarver 3:98d426530167 12 #ifndef ECOMPASS_H__
JimCarver 3:98d426530167 13 #define ECOMPASS_H__
JimCarver 3:98d426530167 14
JimCarver 3:98d426530167 15 #include "mbed.h"
JimCarver 6:37bc03c3b1f9 16 #include "MotionSensor.h"
JimCarver 6:37bc03c3b1f9 17
JimCarver 3:98d426530167 18
JimCarver 3:98d426530167 19 #ifdef __cplusplus
JimCarver 3:98d426530167 20 extern "C" {
JimCarver 3:98d426530167 21 #endif
JimCarver 3:98d426530167 22
JimCarver 3:98d426530167 23 typedef short int16;
JimCarver 3:98d426530167 24 typedef unsigned short uint16;
JimCarver 3:98d426530167 25 typedef unsigned int uint32;
JimCarver 3:98d426530167 26 typedef unsigned char byte;
JimCarver 3:98d426530167 27
JimCarver 3:98d426530167 28 extern void run_eCompass(void);
JimCarver 3:98d426530167 29 extern void init_eCompass(void);
JimCarver 3:98d426530167 30 extern void calibrate_eCompass(void);
JimCarver 3:98d426530167 31
JimCarver 3:98d426530167 32 #define NED_COMPASS 1
JimCarver 3:98d426530167 33 #define ANDROID_COMPASS 2
JimCarver 3:98d426530167 34 #define WINDOWS_COMPASS 3
JimCarver 3:98d426530167 35
JimCarver 3:98d426530167 36 // Macros for constants used in fractional decimal conversion routine.
JimCarver 3:98d426530167 37 // FRAC_2d1 = 2^-1 = 0.5
JimCarver 3:98d426530167 38 // FRAC_2d2 = 2^-2 = 0.25 etc...
JimCarver 3:98d426530167 39 #define FRAC_2d1 5000
JimCarver 3:98d426530167 40 #define FRAC_2d2 2500
JimCarver 3:98d426530167 41 #define FRAC_2d3 1250
JimCarver 3:98d426530167 42 #define FRAC_2d4 625
JimCarver 3:98d426530167 43
JimCarver 3:98d426530167 44 // sensor scaling constants
JimCarver 3:98d426530167 45 #define FCOUNTSPERUT 10.0F // sensor specific: MAG3110 provide 10 counts / uT
JimCarver 3:98d426530167 46 #define FCOUNTSPERG 4096.0F // sensor specific: MMA8451 provide 4096 counts / g in 2g mode
JimCarver 3:98d426530167 47
JimCarver 6:37bc03c3b1f9 48
JimCarver 6:37bc03c3b1f9 49
JimCarver 3:98d426530167 50 typedef struct {
JimCarver 3:98d426530167 51 // Always 1
JimCarver 3:98d426530167 52 uint16 packet_id;
JimCarver 3:98d426530167 53 // Light sensor
JimCarver 3:98d426530167 54 int16 light;
JimCarver 3:98d426530167 55 // Counts at a 0.020MS interval when sensor data is processed
JimCarver 3:98d426530167 56 uint32 timestamp;
JimCarver 3:98d426530167 57 // Ineeger data from accelerometer
JimCarver 3:98d426530167 58 int16 acc_x, acc_y, acc_z;
JimCarver 3:98d426530167 59 // Integer data from Magnetometer
JimCarver 3:98d426530167 60 int16 mag_x, mag_y, mag_z;
JimCarver 3:98d426530167 61 // Roll, Pitch, Yaw and Compass from the eCompass algorithm
JimCarver 3:98d426530167 62 int16 roll, pitch, yaw, compass;
JimCarver 3:98d426530167 63 // Altitude and temperature
JimCarver 3:98d426530167 64 int16 alt, temp;
JimCarver 3:98d426530167 65 // Data from Accelerometer converted to floating point
JimCarver 3:98d426530167 66 float fax, fay, faz;
JimCarver 3:98d426530167 67 // Accelerometer data converted to G's
JimCarver 3:98d426530167 68 float fGax, fGay, fGaz;
JimCarver 3:98d426530167 69 // Data from Magnetometer converted to floating point
JimCarver 3:98d426530167 70 float fmx, fmy, fmz;
JimCarver 3:98d426530167 71 // Magnetometer data converted to UT's
JimCarver 3:98d426530167 72 float fUTmx, fUTmy, fUTmz;
JimCarver 3:98d426530167 73 float q0, q1, q2, q3;
JimCarver 3:98d426530167 74
JimCarver 3:98d426530167 75 } axis6_t;
JimCarver 3:98d426530167 76
JimCarver 3:98d426530167 77 class eCompass
JimCarver 3:98d426530167 78 {
JimCarver 3:98d426530167 79 public:
JimCarver 3:98d426530167 80 eCompass();
JimCarver 6:37bc03c3b1f9 81 void run(MotionSensorDataCounts &acc_raw, MotionSensorDataCounts &mag_raw);
JimCarver 3:98d426530167 82 void calibrate(void);
JimCarver 3:98d426530167 83 void init(void);
JimCarver 3:98d426530167 84
JimCarver 3:98d426530167 85
JimCarver 3:98d426530167 86 private:
JimCarver 3:98d426530167 87 };
JimCarver 3:98d426530167 88
JimCarver 3:98d426530167 89 #ifdef __cplusplus
JimCarver 3:98d426530167 90 }
JimCarver 3:98d426530167 91 #endif
JimCarver 3:98d426530167 92
JimCarver 3:98d426530167 93 #endif