Final Code 12/19/2015
Dependencies: Chemical_Sensor_DMA GPRS DPG_FINAL MBed_Adafruit-GPS-Library SDFileSystem Socket mbed
Sensor.cpp@19:404594768414, 2015-10-21 (annotated)
- Committer:
- DeWayneDennis
- Date:
- Wed Oct 21 19:44:47 2015 +0000
- Revision:
- 19:404594768414
- Parent:
- 14:97611177509b
- Child:
- 21:3d922bea5d77
changed to work with pushing box via http post
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bjcrofts | 0:d7b2716c5a4f | 1 | #pragma once |
bjcrofts | 0:d7b2716c5a4f | 2 | #include "mbed.h" |
bjcrofts | 0:d7b2716c5a4f | 3 | #include "math.h" |
bjcrofts | 0:d7b2716c5a4f | 4 | #include "MBed_Adafruit_GPS.h" |
bjcrofts | 0:d7b2716c5a4f | 5 | #include "SDFileSystem.h" |
bjcrofts | 0:d7b2716c5a4f | 6 | #include "QAM.h" |
bjcrofts | 0:d7b2716c5a4f | 7 | #include "param.h" |
bjcrofts | 8:6b4a6bcd7694 | 8 | #include "GSMLibrary.h" |
bjcrofts | 8:6b4a6bcd7694 | 9 | #include "stdlib.h" |
DeWayneDennis | 19:404594768414 | 10 | #include "GPRSInterface.h" |
bjcrofts | 0:d7b2716c5a4f | 11 | |
bjcrofts | 0:d7b2716c5a4f | 12 | DigitalOut led_red(LED_RED); |
bjcrofts | 0:d7b2716c5a4f | 13 | Serial pc(USBTX, USBRX); |
bjcrofts | 0:d7b2716c5a4f | 14 | Timer t; |
bjcrofts | 8:6b4a6bcd7694 | 15 | bool run = 0; |
bjcrofts | 14:97611177509b | 16 | bool fil = 0; |
bjcrofts | 0:d7b2716c5a4f | 17 | |
bjcrofts | 0:d7b2716c5a4f | 18 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 19 | ** SD FILE SYSTEM ** |
bjcrofts | 0:d7b2716c5a4f | 20 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 21 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); |
DeWayneDennis | 19:404594768414 | 22 | FILE *fpLog; |
DeWayneDennis | 19:404594768414 | 23 | FILE *fpData; |
bjcrofts | 0:d7b2716c5a4f | 24 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 25 | ** GPS ** |
bjcrofts | 0:d7b2716c5a4f | 26 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 27 | Serial * gps_Serial; |
bjcrofts | 0:d7b2716c5a4f | 28 | |
bjcrofts | 0:d7b2716c5a4f | 29 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 30 | ** SENSOR INPUTS ** |
bjcrofts | 0:d7b2716c5a4f | 31 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 32 | AnalogIn AnLong(A0); |
bjcrofts | 0:d7b2716c5a4f | 33 | AnalogIn AnRefLong(A2); |
bjcrofts | 0:d7b2716c5a4f | 34 | Ticker sample_tick; |
bjcrofts | 0:d7b2716c5a4f | 35 | bool takeSample = false; |
DeWayneDennis | 19:404594768414 | 36 | void tick() |
DeWayneDennis | 19:404594768414 | 37 | { |
DeWayneDennis | 19:404594768414 | 38 | takeSample = true; |
DeWayneDennis | 19:404594768414 | 39 | } |
bjcrofts | 0:d7b2716c5a4f | 40 | |
bjcrofts | 0:d7b2716c5a4f | 41 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 42 | ** SIN OUTPUT ** |
bjcrofts | 0:d7b2716c5a4f | 43 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 44 | AnalogOut dac0(DAC0_OUT); |
bjcrofts | 0:d7b2716c5a4f | 45 | int sinRes = (int)1/(CARRIER_FREQ*TIME_CONST); |
bjcrofts | 0:d7b2716c5a4f | 46 | float sinWave[SIN_LENGTH] = {}; |
bjcrofts | 0:d7b2716c5a4f | 47 | int sinIndex = 0; |
bjcrofts | 0:d7b2716c5a4f | 48 | |
bjcrofts | 0:d7b2716c5a4f | 49 | |
bjcrofts | 0:d7b2716c5a4f | 50 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 51 | ** QAM ** |
bjcrofts | 0:d7b2716c5a4f | 52 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 53 | float sLQ[SAMPLE_LENGTH] = {}; |
bjcrofts | 0:d7b2716c5a4f | 54 | float sLI[SAMPLE_LENGTH] = {}; |
bjcrofts | 0:d7b2716c5a4f | 55 | float sRefLQ[SAMPLE_LENGTH] = {}; |
bjcrofts | 0:d7b2716c5a4f | 56 | float sRefLI[SAMPLE_LENGTH] = {}; |
bjcrofts | 0:d7b2716c5a4f | 57 | |
bjcrofts | 0:d7b2716c5a4f | 58 | float Iarray[SAMPLE_LENGTH] = {}; |
bjcrofts | 0:d7b2716c5a4f | 59 | float Qarray[SAMPLE_LENGTH] = {}; |
bjcrofts | 0:d7b2716c5a4f | 60 | int sampleIndex = 0; |
bjcrofts | 0:d7b2716c5a4f | 61 | float I = 0; |
bjcrofts | 0:d7b2716c5a4f | 62 | float Q = 0; |
bjcrofts | 0:d7b2716c5a4f | 63 | float lon = 0; |
bjcrofts | 0:d7b2716c5a4f | 64 | float lonRef = 0; |
DeWayneDennis | 19:404594768414 | 65 | |
DeWayneDennis | 19:404594768414 | 66 | /*Global Variables*/ |
DeWayneDennis | 19:404594768414 | 67 | extern GPRSInterface eth; |
bjcrofts | 0:d7b2716c5a4f | 68 | |
DeWayneDennis | 19:404594768414 | 69 | /*End Global Variables*/ |
DeWayneDennis | 19:404594768414 | 70 | void buildIQ() |
DeWayneDennis | 19:404594768414 | 71 | { |
DeWayneDennis | 19:404594768414 | 72 | for(int i = 0; i < SAMPLE_LENGTH; i++) { |
bjcrofts | 0:d7b2716c5a4f | 73 | Iarray[i] = cos(2*PI*CARRIER_FREQ*i*TIME_CONST); |
bjcrofts | 0:d7b2716c5a4f | 74 | Qarray[i] = -sin(2*PI*CARRIER_FREQ*i*TIME_CONST); |
bjcrofts | 0:d7b2716c5a4f | 75 | } |
bjcrofts | 0:d7b2716c5a4f | 76 | } |
bjcrofts | 0:d7b2716c5a4f | 77 | |
DeWayneDennis | 19:404594768414 | 78 | void create_sinWave() |
DeWayneDennis | 19:404594768414 | 79 | { |
bjcrofts | 0:d7b2716c5a4f | 80 | int i = 0; |
DeWayneDennis | 19:404594768414 | 81 | for(i = 0; i < SIN_LENGTH; i++) { |
bjcrofts | 0:d7b2716c5a4f | 82 | sinWave[i] = 0.25 * sin(2.0*PI*i/sinRes) + 0.75; |
bjcrofts | 0:d7b2716c5a4f | 83 | } |
bjcrofts | 0:d7b2716c5a4f | 84 | } |
bjcrofts | 0:d7b2716c5a4f | 85 | |
DeWayneDennis | 19:404594768414 | 86 | int main () |
DeWayneDennis | 19:404594768414 | 87 | { |
bjcrofts | 0:d7b2716c5a4f | 88 | pc.printf("hello\r\n"); |
DeWayneDennis | 19:404594768414 | 89 | //Initilialize the GSM |
DeWayneDennis | 19:404594768414 | 90 | //gsm_initialize(); |
bjcrofts | 0:d7b2716c5a4f | 91 | // GPS INITIALIZATION ////////////////////////////// |
bjcrofts | 8:6b4a6bcd7694 | 92 | gps_Serial = new Serial(PTC4,PTC3); ////Serial gsm(D1,D0); |
bjcrofts | 0:d7b2716c5a4f | 93 | Adafruit_GPS myGPS(gps_Serial); |
bjcrofts | 0:d7b2716c5a4f | 94 | char c; |
bjcrofts | 0:d7b2716c5a4f | 95 | myGPS.begin(9600); |
bjcrofts | 0:d7b2716c5a4f | 96 | myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); |
bjcrofts | 0:d7b2716c5a4f | 97 | myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); |
bjcrofts | 0:d7b2716c5a4f | 98 | myGPS.sendCommand(PGCMD_ANTENNA); |
bjcrofts | 0:d7b2716c5a4f | 99 | //////////////////////////////////////////////////// |
DeWayneDennis | 19:404594768414 | 100 | |
bjcrofts | 0:d7b2716c5a4f | 101 | buildIQ(); |
bjcrofts | 0:d7b2716c5a4f | 102 | create_sinWave(); |
DeWayneDennis | 19:404594768414 | 103 | |
bjcrofts | 0:d7b2716c5a4f | 104 | float filteredLong = 0; |
bjcrofts | 0:d7b2716c5a4f | 105 | float filteredLongRef = 0; |
DeWayneDennis | 19:404594768414 | 106 | |
DeWayneDennis | 19:404594768414 | 107 | fpData = fopen("/sd/data.txt", "a"); |
DeWayneDennis | 19:404594768414 | 108 | if (fpData != NULL) { |
DeWayneDennis | 19:404594768414 | 109 | fprintf(fpData, "--------------- DCS ------------------"); |
bjcrofts | 14:97611177509b | 110 | } |
DeWayneDennis | 19:404594768414 | 111 | |
DeWayneDennis | 19:404594768414 | 112 | |
bjcrofts | 8:6b4a6bcd7694 | 113 | void gsm_initialize(); |
DeWayneDennis | 19:404594768414 | 114 | |
bjcrofts | 0:d7b2716c5a4f | 115 | sample_tick.attach(&tick, 0.0001); |
DeWayneDennis | 19:404594768414 | 116 | |
bjcrofts | 0:d7b2716c5a4f | 117 | t.start(); |
DeWayneDennis | 19:404594768414 | 118 | |
DeWayneDennis | 19:404594768414 | 119 | while(1) { |
DeWayneDennis | 19:404594768414 | 120 | |
DeWayneDennis | 19:404594768414 | 121 | if(takeSample) { |
DeWayneDennis | 19:404594768414 | 122 | |
bjcrofts | 0:d7b2716c5a4f | 123 | dac0 = sinWave[sinIndex]; |
DeWayneDennis | 19:404594768414 | 124 | |
bjcrofts | 0:d7b2716c5a4f | 125 | lon = AnLong.read(); |
bjcrofts | 0:d7b2716c5a4f | 126 | lonRef = AnRefLong.read(); |
DeWayneDennis | 19:404594768414 | 127 | |
bjcrofts | 0:d7b2716c5a4f | 128 | I = Iarray[sampleIndex]; |
bjcrofts | 0:d7b2716c5a4f | 129 | Q = Qarray[sampleIndex]; |
bjcrofts | 0:d7b2716c5a4f | 130 | sLI[sampleIndex] = lon*I; |
bjcrofts | 0:d7b2716c5a4f | 131 | sLQ[sampleIndex] = lon*Q; |
bjcrofts | 0:d7b2716c5a4f | 132 | sRefLI[sampleIndex] = lonRef*I; |
bjcrofts | 0:d7b2716c5a4f | 133 | sRefLQ[sampleIndex] = lonRef*Q; |
DeWayneDennis | 19:404594768414 | 134 | |
bjcrofts | 8:6b4a6bcd7694 | 135 | takeSample = false; |
DeWayneDennis | 19:404594768414 | 136 | |
bjcrofts | 8:6b4a6bcd7694 | 137 | sinIndex++; |
DeWayneDennis | 19:404594768414 | 138 | if((sinIndex+1) > SIN_LENGTH) { |
bjcrofts | 8:6b4a6bcd7694 | 139 | sinIndex = 0; |
bjcrofts | 8:6b4a6bcd7694 | 140 | } |
DeWayneDennis | 19:404594768414 | 141 | |
DeWayneDennis | 19:404594768414 | 142 | |
bjcrofts | 0:d7b2716c5a4f | 143 | sampleIndex++; |
DeWayneDennis | 19:404594768414 | 144 | if(sampleIndex+1 > SAMPLE_LENGTH) { |
bjcrofts | 14:97611177509b | 145 | fil = 1; |
bjcrofts | 0:d7b2716c5a4f | 146 | } |
DeWayneDennis | 19:404594768414 | 147 | |
DeWayneDennis | 19:404594768414 | 148 | |
bjcrofts | 0:d7b2716c5a4f | 149 | } |
bjcrofts | 8:6b4a6bcd7694 | 150 | |
DeWayneDennis | 19:404594768414 | 151 | if(fil==1) { |
DeWayneDennis | 19:404594768414 | 152 | |
bjcrofts | 14:97611177509b | 153 | fil = 0; |
bjcrofts | 8:6b4a6bcd7694 | 154 | run = 1; |
DeWayneDennis | 19:404594768414 | 155 | |
bjcrofts | 0:d7b2716c5a4f | 156 | sampleIndex = 0; |
DeWayneDennis | 19:404594768414 | 157 | |
bjcrofts | 8:6b4a6bcd7694 | 158 | gsm_tick(); |
DeWayneDennis | 19:404594768414 | 159 | |
DeWayneDennis | 19:404594768414 | 160 | filteredLong = 15*QAM(sLI, sLQ); |
bjcrofts | 14:97611177509b | 161 | filteredLongRef = QAM(sRefLI, sRefLQ); |
DeWayneDennis | 19:404594768414 | 162 | |
bjcrofts | 14:97611177509b | 163 | gsm_tick(); |
DeWayneDennis | 19:404594768414 | 164 | |
DeWayneDennis | 19:404594768414 | 165 | } |
bjcrofts | 0:d7b2716c5a4f | 166 | c = myGPS.read(); |
bjcrofts | 0:d7b2716c5a4f | 167 | if ( myGPS.newNMEAreceived() ) { |
bjcrofts | 0:d7b2716c5a4f | 168 | if ( !myGPS.parse(myGPS.lastNMEA()) ) { |
DeWayneDennis | 19:404594768414 | 169 | //continue; |
bjcrofts | 0:d7b2716c5a4f | 170 | } |
bjcrofts | 0:d7b2716c5a4f | 171 | } |
bjcrofts | 0:d7b2716c5a4f | 172 | |
DeWayneDennis | 19:404594768414 | 173 | if(run) { |
bjcrofts | 0:d7b2716c5a4f | 174 | led_red = !led_red; |
bjcrofts | 8:6b4a6bcd7694 | 175 | run = 0; |
DeWayneDennis | 19:404594768414 | 176 | |
bjcrofts | 8:6b4a6bcd7694 | 177 | pc.printf("%f, ", filteredLong); |
bjcrofts | 8:6b4a6bcd7694 | 178 | pc.printf("%f, ", filteredLongRef); |
DeWayneDennis | 19:404594768414 | 179 | pc.printf("%f\r\n", filteredLong/filteredLongRef); |
DeWayneDennis | 19:404594768414 | 180 | pc.printf("%02d:%02d:%02d \r\n", myGPS.hour-6, myGPS.minute, myGPS.seconds); |
DeWayneDennis | 19:404594768414 | 181 | |
bjcrofts | 8:6b4a6bcd7694 | 182 | if (myGPS.fix) pc.printf("%5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); |
bjcrofts | 0:d7b2716c5a4f | 183 | else pc.printf("No GPS fix\r\n"); |
bjcrofts | 0:d7b2716c5a4f | 184 | pc.printf("--------------------------------\r\n"); |
DeWayneDennis | 19:404594768414 | 185 | |
DeWayneDennis | 19:404594768414 | 186 | fpData = fopen("/sd/data.txt", "a"); |
DeWayneDennis | 19:404594768414 | 187 | if (fpData != NULL) { |
DeWayneDennis | 19:404594768414 | 188 | fprintf(fpData, "%f, ", filteredLong); |
DeWayneDennis | 19:404594768414 | 189 | fprintf(fpData, "%f\r\n", filteredLongRef); |
DeWayneDennis | 19:404594768414 | 190 | fprintf(fpData, "%02d:%02d:%02d\r\n", myGPS.hour-6, myGPS.minute, myGPS.seconds); |
DeWayneDennis | 19:404594768414 | 191 | if (myGPS.fix) fprintf(fpData, "%5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); |
DeWayneDennis | 19:404594768414 | 192 | fclose(fpData); |
DeWayneDennis | 19:404594768414 | 193 | } |
DeWayneDennis | 19:404594768414 | 194 | if(myGPS.fix) |
DeWayneDennis | 19:404594768414 | 195 | gsm_send_data(filteredLong, filteredLongRef, myGPS.hour-6, myGPS.minute, myGPS.seconds, myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); |
DeWayneDennis | 19:404594768414 | 196 | else |
DeWayneDennis | 19:404594768414 | 197 | gsm_send_data(filteredLong, filteredLongRef,myGPS.hour-6, myGPS.minute, myGPS.seconds, 0, 0, 0, 0); |
bjcrofts | 0:d7b2716c5a4f | 198 | |
DeWayneDennis | 19:404594768414 | 199 | } |
bjcrofts | 14:97611177509b | 200 | |
bjcrofts | 0:d7b2716c5a4f | 201 | } |
bjcrofts | 0:d7b2716c5a4f | 202 | } |