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
meta.cpp@0:77857a36b4ff, 2015-03-27 (annotated)
- 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?
User | Revision | Line number | New 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 |