K64F based data logger for GPS (ublox MAX M8Q) & 6 Axis Sensor (FXOS8700Q) - Outputs to SD + UDP - Uses FRDM K64F + ublox "Cellular and positioning shield" (3G version)

Dependencies:   MAX_M8Q_Capture EthernetInterface FXOS8700Q SDFileSystem eCompass_FPU_Lib mbed-rtos mbed

Committer:
rlinnmoran
Date:
Fri Mar 27 08:35:29 2015 +0000
Revision:
0:77857a36b4ff
Child:
2:bcd60a69583f
Initial version.; ; Working:; - Capture GPS ; - Capture 6 Axis; - Write to CVS on SD (crude); ; Issues:; - Update freq slow (5s); - No UDP; - Improve SD functions; - Clean MetaData class code + docs; - No status led, start/stop button; - Param for printf's

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rlinnmoran 0:77857a36b4ff 1 #include "meta.h"
rlinnmoran 0:77857a36b4ff 2 #include "mbed.h"
rlinnmoran 0:77857a36b4ff 3 #include "eCompass_Lib.h"
rlinnmoran 0:77857a36b4ff 4 #include "MAX_M8Q.h"
rlinnmoran 0:77857a36b4ff 5 #include <string>
rlinnmoran 0:77857a36b4ff 6
rlinnmoran 0:77857a36b4ff 7
rlinnmoran 0:77857a36b4ff 8 DigitalOut led(LED_RED);
rlinnmoran 0:77857a36b4ff 9
rlinnmoran 0:77857a36b4ff 10
rlinnmoran 0:77857a36b4ff 11 // eCompass external declarations
rlinnmoran 0:77857a36b4ff 12 extern axis6_t axis6; // Structure to store 6Axis data
rlinnmoran 0:77857a36b4ff 13 extern int captureCompass(void const *argument); // Prototype
rlinnmoran 0:77857a36b4ff 14
rlinnmoran 0:77857a36b4ff 15 extern gpsinfo_t gpsinfo; // Structure that stores GPS data
rlinnmoran 0:77857a36b4ff 16 extern int captureMAX_M8Q(void); // Prototype
rlinnmoran 0:77857a36b4ff 17
rlinnmoran 0:77857a36b4ff 18 extern int sd_append(char*); // Prototype
rlinnmoran 0:77857a36b4ff 19
rlinnmoran 0:77857a36b4ff 20 // Constructor - builds an object that gathers 6axis and GPS data
rlinnmoran 0:77857a36b4ff 21 MetaData::MetaData()
rlinnmoran 0:77857a36b4ff 22 {
rlinnmoran 0:77857a36b4ff 23 //while(1){led = !led;wait(0.5);}
rlinnmoran 0:77857a36b4ff 24
rlinnmoran 0:77857a36b4ff 25 // Capture compass measurement
rlinnmoran 0:77857a36b4ff 26 printf("Starting compass measurement...\r\n");
rlinnmoran 0:77857a36b4ff 27 capture6Axis(&axis6);
rlinnmoran 0:77857a36b4ff 28
rlinnmoran 0:77857a36b4ff 29
rlinnmoran 0:77857a36b4ff 30 // Capture GPS measurement
rlinnmoran 0:77857a36b4ff 31 printf("Starting GPS measurement...\r\n");
rlinnmoran 0:77857a36b4ff 32 captureGPS(&gpsinfo);
rlinnmoran 0:77857a36b4ff 33 }
rlinnmoran 0:77857a36b4ff 34
rlinnmoran 0:77857a36b4ff 35
rlinnmoran 0:77857a36b4ff 36 void MetaData::capture6Axis(axis6_t* metaAxis6){
rlinnmoran 0:77857a36b4ff 37
rlinnmoran 0:77857a36b4ff 38 // Perform compass measurement
rlinnmoran 0:77857a36b4ff 39 printf("Performing compass measurement\r\n");
rlinnmoran 0:77857a36b4ff 40
rlinnmoran 0:77857a36b4ff 41 if(captureCompass(""))
rlinnmoran 0:77857a36b4ff 42 printf("compass_thread failed:e001\r\n");
rlinnmoran 0:77857a36b4ff 43
rlinnmoran 0:77857a36b4ff 44 // Assign compass results to MetaData class
rlinnmoran 0:77857a36b4ff 45 printf("Assigning compass results to MetaData class\r\n");
rlinnmoran 0:77857a36b4ff 46
rlinnmoran 0:77857a36b4ff 47 // Roll, Pitch, Yaw and Compass from the eCompass algorithm
rlinnmoran 0:77857a36b4ff 48 roll = metaAxis6->roll;
rlinnmoran 0:77857a36b4ff 49 pitch = metaAxis6->pitch;
rlinnmoran 0:77857a36b4ff 50 yaw = metaAxis6->yaw;
rlinnmoran 0:77857a36b4ff 51
rlinnmoran 0:77857a36b4ff 52 // Accelerometer data converted to G's
rlinnmoran 0:77857a36b4ff 53 fGax = metaAxis6->fGax;
rlinnmoran 0:77857a36b4ff 54 fGay = metaAxis6->fGay;
rlinnmoran 0:77857a36b4ff 55 fGaz = metaAxis6->fGaz;
rlinnmoran 0:77857a36b4ff 56
rlinnmoran 0:77857a36b4ff 57 // Magnetometer data converted to UT's
rlinnmoran 0:77857a36b4ff 58 fUTmx = metaAxis6->fUTmx;
rlinnmoran 0:77857a36b4ff 59 fUTmy = metaAxis6->fUTmy;
rlinnmoran 0:77857a36b4ff 60 fUTmz = metaAxis6->fUTmz;
rlinnmoran 0:77857a36b4ff 61
rlinnmoran 0:77857a36b4ff 62 // Data from Quaternion converted to floating point
rlinnmoran 0:77857a36b4ff 63 q0 = metaAxis6->q0;
rlinnmoran 0:77857a36b4ff 64 q1 = metaAxis6->q1;
rlinnmoran 0:77857a36b4ff 65 q2 = metaAxis6->q2;
rlinnmoran 0:77857a36b4ff 66 q3 = metaAxis6->q3;
rlinnmoran 0:77857a36b4ff 67
rlinnmoran 0:77857a36b4ff 68 printf("Compass data measured & stored\r\n");
rlinnmoran 0:77857a36b4ff 69 }
rlinnmoran 0:77857a36b4ff 70
rlinnmoran 0:77857a36b4ff 71
rlinnmoran 0:77857a36b4ff 72 void MetaData::captureGPS(gpsinfo_t* metaGpsinfo){
rlinnmoran 0:77857a36b4ff 73
rlinnmoran 0:77857a36b4ff 74 //Perform GPS Measurement
rlinnmoran 0:77857a36b4ff 75 printf("Performing GPS measurement\r\n");
rlinnmoran 0:77857a36b4ff 76 if(captureMAX_M8Q())
rlinnmoran 0:77857a36b4ff 77 printf("GPS (captureMAX_M8Q) failed:e001\r\n");
rlinnmoran 0:77857a36b4ff 78
rlinnmoran 0:77857a36b4ff 79 // Assign GPS results to MetaData class
rlinnmoran 0:77857a36b4ff 80 printf("Assign GPS results to MetaData class\r\n");
rlinnmoran 0:77857a36b4ff 81
rlinnmoran 0:77857a36b4ff 82 lat = metaGpsinfo->lat; // GPS Latitude (deg)
rlinnmoran 0:77857a36b4ff 83 lng = metaGpsinfo->lng; // GPS Longitude (deg)
rlinnmoran 0:77857a36b4ff 84 alt = metaGpsinfo->alt; // GPS Altitude (m)
rlinnmoran 0:77857a36b4ff 85 NS = metaGpsinfo->NS; // GPS NS indicator
rlinnmoran 0:77857a36b4ff 86 EW = metaGpsinfo->EW; // GPS EW indicator
rlinnmoran 0:77857a36b4ff 87 spd = metaGpsinfo->spd; // GPS Speed (kmph)
rlinnmoran 0:77857a36b4ff 88 utc = metaGpsinfo->utc; // GPS UTC time (hhmmss.ss)
rlinnmoran 0:77857a36b4ff 89 dte = metaGpsinfo->dte; // GPS Date (ddmmyy)
rlinnmoran 0:77857a36b4ff 90
rlinnmoran 0:77857a36b4ff 91 printf("GPS data measured & stored\r\n");
rlinnmoran 0:77857a36b4ff 92
rlinnmoran 0:77857a36b4ff 93 }
rlinnmoran 0:77857a36b4ff 94
rlinnmoran 0:77857a36b4ff 95 void MetaData::outputToCVSstring(void){
rlinnmoran 0:77857a36b4ff 96
rlinnmoran 0:77857a36b4ff 97 int n;
rlinnmoran 0:77857a36b4ff 98 n = sprintf(CSVOutput,"%.5f,"
rlinnmoran 0:77857a36b4ff 99 "%.5f,"
rlinnmoran 0:77857a36b4ff 100 "%.1f,"
rlinnmoran 0:77857a36b4ff 101 "%c,"
rlinnmoran 0:77857a36b4ff 102 "%c,"
rlinnmoran 0:77857a36b4ff 103 "%.3f,"
rlinnmoran 0:77857a36b4ff 104 "%.2f,"
rlinnmoran 0:77857a36b4ff 105 "%d,"
rlinnmoran 0:77857a36b4ff 106 "%d,"
rlinnmoran 0:77857a36b4ff 107 "%d,"
rlinnmoran 0:77857a36b4ff 108 "%d,"
rlinnmoran 0:77857a36b4ff 109 "%2.3f,"
rlinnmoran 0:77857a36b4ff 110 "%2.3f,"
rlinnmoran 0:77857a36b4ff 111 "%2.3f,"
rlinnmoran 0:77857a36b4ff 112 "%4.1f,"
rlinnmoran 0:77857a36b4ff 113 "%4.1f,"
rlinnmoran 0:77857a36b4ff 114 "%4.1f,"
rlinnmoran 0:77857a36b4ff 115 "%1.4f,"
rlinnmoran 0:77857a36b4ff 116 "%1.4f,"
rlinnmoran 0:77857a36b4ff 117 "%1.4f,"
rlinnmoran 0:77857a36b4ff 118 "%1.4f\r\n",
rlinnmoran 0:77857a36b4ff 119 lat,
rlinnmoran 0:77857a36b4ff 120 lng,
rlinnmoran 0:77857a36b4ff 121 alt,
rlinnmoran 0:77857a36b4ff 122 NS,
rlinnmoran 0:77857a36b4ff 123 EW,
rlinnmoran 0:77857a36b4ff 124 spd,
rlinnmoran 0:77857a36b4ff 125 utc,
rlinnmoran 0:77857a36b4ff 126 dte,
rlinnmoran 0:77857a36b4ff 127 roll,
rlinnmoran 0:77857a36b4ff 128 pitch,
rlinnmoran 0:77857a36b4ff 129 yaw,
rlinnmoran 0:77857a36b4ff 130 fGax,
rlinnmoran 0:77857a36b4ff 131 fGay,
rlinnmoran 0:77857a36b4ff 132 fGaz,
rlinnmoran 0:77857a36b4ff 133 fUTmx,
rlinnmoran 0:77857a36b4ff 134 fUTmy,
rlinnmoran 0:77857a36b4ff 135 fUTmz,
rlinnmoran 0:77857a36b4ff 136 q0,
rlinnmoran 0:77857a36b4ff 137 q1,
rlinnmoran 0:77857a36b4ff 138 q2,
rlinnmoran 0:77857a36b4ff 139 q3);
rlinnmoran 0:77857a36b4ff 140
rlinnmoran 0:77857a36b4ff 141 printf("CSVOutput: %s\r\n",CSVOutput);
rlinnmoran 0:77857a36b4ff 142
rlinnmoran 0:77857a36b4ff 143 }
rlinnmoran 0:77857a36b4ff 144
rlinnmoran 0:77857a36b4ff 145 void MetaData::appendSDcard(void)
rlinnmoran 0:77857a36b4ff 146 {
rlinnmoran 0:77857a36b4ff 147 sd_append(CSVOutput);
rlinnmoran 0:77857a36b4ff 148 }
rlinnmoran 0:77857a36b4ff 149
rlinnmoran 0:77857a36b4ff 150