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:
Fri May 16 18:18:42 2014 +0000
Revision:
6:a161cb3bd061
Parent:
5:1b8ec4e7687b
Implements new 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 5:1b8ec4e7687b 16 #include "MotionSensor.h"
JimCarver 5:1b8ec4e7687b 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 3:98d426530167 48 typedef struct {
JimCarver 3:98d426530167 49 // Always 1
JimCarver 3:98d426530167 50 uint16 packet_id;
JimCarver 3:98d426530167 51 // Light sensor
JimCarver 3:98d426530167 52 int16 light;
JimCarver 3:98d426530167 53 // Counts at a 0.020MS interval when sensor data is processed
JimCarver 3:98d426530167 54 uint32 timestamp;
JimCarver 3:98d426530167 55 // Ineeger data from accelerometer
JimCarver 3:98d426530167 56 int16 acc_x, acc_y, acc_z;
JimCarver 3:98d426530167 57 // Integer data from Magnetometer
JimCarver 3:98d426530167 58 int16 mag_x, mag_y, mag_z;
JimCarver 3:98d426530167 59 // Roll, Pitch, Yaw and Compass from the eCompass algorithm
JimCarver 3:98d426530167 60 int16 roll, pitch, yaw, compass;
JimCarver 3:98d426530167 61 // Altitude and temperature
JimCarver 3:98d426530167 62 int16 alt, temp;
JimCarver 3:98d426530167 63 // Data from Accelerometer converted to floating point
JimCarver 3:98d426530167 64 float fax, fay, faz;
JimCarver 3:98d426530167 65 // Accelerometer data converted to G's
JimCarver 3:98d426530167 66 float fGax, fGay, fGaz;
JimCarver 3:98d426530167 67 // Data from Magnetometer converted to floating point
JimCarver 3:98d426530167 68 float fmx, fmy, fmz;
JimCarver 3:98d426530167 69 // Magnetometer data converted to UT's
JimCarver 3:98d426530167 70 float fUTmx, fUTmy, fUTmz;
JimCarver 3:98d426530167 71 float q0, q1, q2, q3;
JimCarver 3:98d426530167 72
JimCarver 3:98d426530167 73 } axis6_t;
JimCarver 3:98d426530167 74
JimCarver 3:98d426530167 75 class eCompass
JimCarver 3:98d426530167 76 {
JimCarver 3:98d426530167 77 public:
JimCarver 3:98d426530167 78 eCompass();
JimCarver 5:1b8ec4e7687b 79 void run(MotionSensorDataCounts &acc_raw, MotionSensorDataCounts &mag_raw);
JimCarver 3:98d426530167 80 void calibrate(void);
JimCarver 3:98d426530167 81 void init(void);
JimCarver 3:98d426530167 82
JimCarver 3:98d426530167 83
JimCarver 3:98d426530167 84 private:
JimCarver 3:98d426530167 85 };
JimCarver 3:98d426530167 86
JimCarver 3:98d426530167 87 #ifdef __cplusplus
JimCarver 3:98d426530167 88 }
JimCarver 3:98d426530167 89 #endif
JimCarver 3:98d426530167 90
JimCarver 3:98d426530167 91 #endif