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
Wi-Go_eCompass_Lib_V3.h@0:6296487369d8, 2013-09-06 (annotated)
- Committer:
- frankvnk
- Date:
- Fri Sep 06 09:02:26 2013 +0000
- Revision:
- 0:6296487369d8
- Child:
- 1:c37fee2125c6
First release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
frankvnk | 0:6296487369d8 | 1 | /******************************************************************** |
frankvnk | 0:6296487369d8 | 2 | * File : eCompass.h |
frankvnk | 0:6296487369d8 | 3 | * Date : 18/07/2013 |
frankvnk | 0:6296487369d8 | 4 | * Purpose : Wi-Go interface and hardware peripherals definition |
frankvnk | 0:6296487369d8 | 5 | * Author : Frank Vannieuwkerke |
frankvnk | 0:6296487369d8 | 6 | * Description: ported from Avnet Wi-Go Board |
frankvnk | 0:6296487369d8 | 7 | *********************************************************************/ |
frankvnk | 0:6296487369d8 | 8 | #ifndef ECOMPASS_H__ |
frankvnk | 0:6296487369d8 | 9 | #define ECOMPASS_H__ |
frankvnk | 0:6296487369d8 | 10 | |
frankvnk | 0:6296487369d8 | 11 | //#include "common.h" |
frankvnk | 0:6296487369d8 | 12 | //#include "Wi-Go_eCompass_Lib_V3.ar" |
frankvnk | 0:6296487369d8 | 13 | |
frankvnk | 0:6296487369d8 | 14 | #ifdef __cplusplus |
frankvnk | 0:6296487369d8 | 15 | extern "C" { |
frankvnk | 0:6296487369d8 | 16 | #endif |
frankvnk | 0:6296487369d8 | 17 | |
frankvnk | 0:6296487369d8 | 18 | typedef short int16; |
frankvnk | 0:6296487369d8 | 19 | typedef unsigned short uint16; |
frankvnk | 0:6296487369d8 | 20 | typedef unsigned int uint32; |
frankvnk | 0:6296487369d8 | 21 | typedef unsigned char byte; |
frankvnk | 0:6296487369d8 | 22 | |
frankvnk | 0:6296487369d8 | 23 | extern void run_eCompass(void); |
frankvnk | 0:6296487369d8 | 24 | extern void init_eCompass(void); |
frankvnk | 0:6296487369d8 | 25 | extern void calibrate_eCompass(void); |
frankvnk | 0:6296487369d8 | 26 | |
frankvnk | 0:6296487369d8 | 27 | #define NED_COMPASS 1 |
frankvnk | 0:6296487369d8 | 28 | #define ANDROID_COMPASS 2 |
frankvnk | 0:6296487369d8 | 29 | #define WINDOWS_COMPASS 3 |
frankvnk | 0:6296487369d8 | 30 | |
frankvnk | 0:6296487369d8 | 31 | // Macros for constants used in fractional decimal conversion routine. |
frankvnk | 0:6296487369d8 | 32 | // FRAC_2d1 = 2^-1 = 0.5 |
frankvnk | 0:6296487369d8 | 33 | // FRAC_2d2 = 2^-2 = 0.25 etc... |
frankvnk | 0:6296487369d8 | 34 | #define FRAC_2d1 5000 |
frankvnk | 0:6296487369d8 | 35 | #define FRAC_2d2 2500 |
frankvnk | 0:6296487369d8 | 36 | #define FRAC_2d3 1250 |
frankvnk | 0:6296487369d8 | 37 | #define FRAC_2d4 625 |
frankvnk | 0:6296487369d8 | 38 | |
frankvnk | 0:6296487369d8 | 39 | // sensor scaling constants |
frankvnk | 0:6296487369d8 | 40 | #define FCOUNTSPERUT 10.0F // sensor specific: MAG3110 provide 10 counts / uT |
frankvnk | 0:6296487369d8 | 41 | #define FCOUNTSPERG 4096.0F // sensor specific: MMA8451 provide 4096 counts / g in 2g mode |
frankvnk | 0:6296487369d8 | 42 | |
frankvnk | 0:6296487369d8 | 43 | typedef struct { |
frankvnk | 0:6296487369d8 | 44 | // Always 1 |
frankvnk | 0:6296487369d8 | 45 | uint16 packet_id; |
frankvnk | 0:6296487369d8 | 46 | // Light sensor |
frankvnk | 0:6296487369d8 | 47 | int16 light; |
frankvnk | 0:6296487369d8 | 48 | // Counts at a 0.020MS interval when sensor data is processed |
frankvnk | 0:6296487369d8 | 49 | uint32 timestamp; |
frankvnk | 0:6296487369d8 | 50 | // Ineeger data from accelerometer |
frankvnk | 0:6296487369d8 | 51 | int16 acc_x, acc_y, acc_z; |
frankvnk | 0:6296487369d8 | 52 | // Integer data from Magnetometer |
frankvnk | 0:6296487369d8 | 53 | int16 mag_x, mag_y, mag_z; |
frankvnk | 0:6296487369d8 | 54 | // Roll, Pitch, Yaw and Compass from the eCompass algorithm |
frankvnk | 0:6296487369d8 | 55 | int16 roll, pitch, yaw, compass; |
frankvnk | 0:6296487369d8 | 56 | // Altitude and temperature |
frankvnk | 0:6296487369d8 | 57 | int16 alt, temp; |
frankvnk | 0:6296487369d8 | 58 | // Data from Accelerometer converted to floating point |
frankvnk | 0:6296487369d8 | 59 | float fax, fay, faz; |
frankvnk | 0:6296487369d8 | 60 | // Accelerometer data converted to G's |
frankvnk | 0:6296487369d8 | 61 | float fGax, fGay, fGaz; |
frankvnk | 0:6296487369d8 | 62 | // Data from Magnetometer converted to floating point |
frankvnk | 0:6296487369d8 | 63 | float fmx, fmy, fmz; |
frankvnk | 0:6296487369d8 | 64 | // Magnetometer data converted to UT's |
frankvnk | 0:6296487369d8 | 65 | float fUTmx, fUTmy, fUTmz; |
frankvnk | 0:6296487369d8 | 66 | float q0, q1, q2, q3; |
frankvnk | 0:6296487369d8 | 67 | |
frankvnk | 0:6296487369d8 | 68 | } axis6_t; |
frankvnk | 0:6296487369d8 | 69 | |
frankvnk | 0:6296487369d8 | 70 | #ifdef __cplusplus |
frankvnk | 0:6296487369d8 | 71 | } |
frankvnk | 0:6296487369d8 | 72 | #endif |
frankvnk | 0:6296487369d8 | 73 | |
frankvnk | 0:6296487369d8 | 74 | #endif |