Final Code 12/19/2015
Dependencies: Chemical_Sensor_DMA GPRS DPG_FINAL MBed_Adafruit-GPS-Library SDFileSystem Socket mbed
Sensor.cpp@23:0ce1f69ea710, 2015-12-19 (annotated)
- Committer:
- DeWayneDennis
- Date:
- Sat Dec 19 21:58:45 2015 +0000
- Revision:
- 23:0ce1f69ea710
- Parent:
- 22:f46576c40722
Final Code 12/19/2015
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 "MBed_Adafruit_GPS.h" |
bjcrofts | 0:d7b2716c5a4f | 4 | #include "SDFileSystem.h" |
bjcrofts | 8:6b4a6bcd7694 | 5 | #include "GSMLibrary.h" |
bjcrofts | 8:6b4a6bcd7694 | 6 | #include "stdlib.h" |
DeWayneDennis | 19:404594768414 | 7 | #include "GPRSInterface.h" |
DeWayneDennis | 21:3d922bea5d77 | 8 | #include "Chemical_Sensor_DMA/pause.cpp" |
DeWayneDennis | 21:3d922bea5d77 | 9 | #include "Chemical_Sensor_DMA/Sample/adc.h" |
DeWayneDennis | 21:3d922bea5d77 | 10 | #include "Chemical_Sensor_DMA/Sample/pdb.h" |
DeWayneDennis | 21:3d922bea5d77 | 11 | #include "Chemical_Sensor_DMA/SignalProcessing.h" |
bjcrofts | 0:d7b2716c5a4f | 12 | |
DeWayneDennis | 22:f46576c40722 | 13 | /************************************************** |
DeWayneDennis | 22:f46576c40722 | 14 | ** GPS ** |
DeWayneDennis | 22:f46576c40722 | 15 | **************************************************/ |
DeWayneDennis | 22:f46576c40722 | 16 | Serial * gps_Serial; |
bjcrofts | 0:d7b2716c5a4f | 17 | Serial pc(USBTX, USBRX); |
bjcrofts | 0:d7b2716c5a4f | 18 | |
bjcrofts | 0:d7b2716c5a4f | 19 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 20 | ** SD FILE SYSTEM ** |
bjcrofts | 0:d7b2716c5a4f | 21 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 22 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); |
DeWayneDennis | 19:404594768414 | 23 | FILE *fpLog; |
DeWayneDennis | 19:404594768414 | 24 | FILE *fpData; |
bjcrofts | 0:d7b2716c5a4f | 25 | |
bjcrofts | 0:d7b2716c5a4f | 26 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 27 | ** SENSOR INPUTS ** |
bjcrofts | 0:d7b2716c5a4f | 28 | **************************************************/ |
DeWayneDennis | 19:404594768414 | 29 | /*Global Variables*/ |
DeWayneDennis | 19:404594768414 | 30 | extern GPRSInterface eth; |
DeWayneDennis | 22:f46576c40722 | 31 | uint16_t *p1; |
DeWayneDennis | 22:f46576c40722 | 32 | float filteredLong,filteredLongRef; |
DeWayneDennis | 22:f46576c40722 | 33 | /*End Global Variables*/ |
bjcrofts | 0:d7b2716c5a4f | 34 | |
DeWayneDennis | 22:f46576c40722 | 35 | /*int main () |
DeWayneDennis | 22:f46576c40722 | 36 | { |
DeWayneDennis | 22:f46576c40722 | 37 | Timer refresh_Timer; //sets up a timer for use in loop; how often do we print GPS info? |
DeWayneDennis | 22:f46576c40722 | 38 | const int refresh_Time = 1000; //refresh time in ms |
DeWayneDennis | 22:f46576c40722 | 39 | |
DeWayneDennis | 22:f46576c40722 | 40 | //set to 1 for daylight savings time |
DeWayneDennis | 22:f46576c40722 | 41 | int daylightsavings = 1; |
DeWayneDennis | 22:f46576c40722 | 42 | |
DeWayneDennis | 22:f46576c40722 | 43 | // GPS INITIALIZATION ////////////////////////////// |
DeWayneDennis | 22:f46576c40722 | 44 | pc.printf("Initialize GPS\r\n"); |
DeWayneDennis | 22:f46576c40722 | 45 | gps_Serial = new Serial(PTC4,PTC3); |
DeWayneDennis | 22:f46576c40722 | 46 | Adafruit_GPS myGPS(gps_Serial); |
DeWayneDennis | 22:f46576c40722 | 47 | char c; |
DeWayneDennis | 22:f46576c40722 | 48 | myGPS.begin(9600); |
DeWayneDennis | 22:f46576c40722 | 49 | myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY); |
DeWayneDennis | 22:f46576c40722 | 50 | myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); |
DeWayneDennis | 22:f46576c40722 | 51 | myGPS.sendCommand(PGCMD_ANTENNA); |
DeWayneDennis | 22:f46576c40722 | 52 | //////////////////////////////////////////////////// |
DeWayneDennis | 22:f46576c40722 | 53 | |
DeWayneDennis | 22:f46576c40722 | 54 | wait(2.3); |
DeWayneDennis | 22:f46576c40722 | 55 | |
DeWayneDennis | 22:f46576c40722 | 56 | |
DeWayneDennis | 22:f46576c40722 | 57 | pc.printf("Compute Tables\r\n"); |
DeWayneDennis | 22:f46576c40722 | 58 | pre_compute_tables(); |
DeWayneDennis | 22:f46576c40722 | 59 | |
DeWayneDennis | 22:f46576c40722 | 60 | pc.printf("Initialize\r\n"); |
DeWayneDennis | 22:f46576c40722 | 61 | initialize(); |
DeWayneDennis | 22:f46576c40722 | 62 | |
DeWayneDennis | 22:f46576c40722 | 63 | |
DeWayneDennis | 22:f46576c40722 | 64 | int startAddress = (int)&sample_array0[0]; |
DeWayneDennis | 22:f46576c40722 | 65 | int destinationIndex = (DMA_TCD0_DADDR-startAddress)/2; |
DeWayneDennis | 22:f46576c40722 | 66 | int currentIndex = 0; |
DeWayneDennis | 22:f46576c40722 | 67 | |
DeWayneDennis | 22:f46576c40722 | 68 | pc.printf("hello :)\r\n"); |
DeWayneDennis | 22:f46576c40722 | 69 | float filteredLong = 0.0; |
DeWayneDennis | 22:f46576c40722 | 70 | float filteredLongRef = 0.0; |
DeWayneDennis | 22:f46576c40722 | 71 | |
DeWayneDennis | 22:f46576c40722 | 72 | refresh_Timer.start(); //starts the clock on the timer |
DeWayneDennis | 22:f46576c40722 | 73 | |
DeWayneDennis | 22:f46576c40722 | 74 | //main while loop for data processing |
DeWayneDennis | 22:f46576c40722 | 75 | pc.printf("Begin Processing Data...\r\n"); |
DeWayneDennis | 22:f46576c40722 | 76 | while(1) { |
DeWayneDennis | 22:f46576c40722 | 77 | //get GPS coordinates |
DeWayneDennis | 22:f46576c40722 | 78 | c = myGPS.read(); |
DeWayneDennis | 22:f46576c40722 | 79 | if ( myGPS.newNMEAreceived() ) { |
DeWayneDennis | 22:f46576c40722 | 80 | if ( !myGPS.parse(myGPS.lastNMEA()) ) { |
DeWayneDennis | 22:f46576c40722 | 81 | //continue; |
DeWayneDennis | 22:f46576c40722 | 82 | } |
DeWayneDennis | 22:f46576c40722 | 83 | } |
DeWayneDennis | 22:f46576c40722 | 84 | //eth.setCellTime(); |
DeWayneDennis | 22:f46576c40722 | 85 | //filter the data stored in the DAC |
DeWayneDennis | 22:f46576c40722 | 86 | do |
DeWayneDennis | 22:f46576c40722 | 87 | { |
DeWayneDennis | 22:f46576c40722 | 88 | destinationIndex = getDestinationIndex(); |
DeWayneDennis | 22:f46576c40722 | 89 | }while (currentIndex == destinationIndex); |
DeWayneDennis | 22:f46576c40722 | 90 | |
DeWayneDennis | 22:f46576c40722 | 91 | while (currentIndex!=destinationIndex) |
DeWayneDennis | 22:f46576c40722 | 92 | { |
DeWayneDennis | 22:f46576c40722 | 93 | filter100K(sample_array0[currentIndex], sample_array1[currentIndex]); |
DeWayneDennis | 22:f46576c40722 | 94 | currentIndex++; |
DeWayneDennis | 22:f46576c40722 | 95 | if (currentIndex>=2000){ |
DeWayneDennis | 22:f46576c40722 | 96 | currentIndex = 0; |
DeWayneDennis | 22:f46576c40722 | 97 | } |
DeWayneDennis | 22:f46576c40722 | 98 | |
DeWayneDennis | 22:f46576c40722 | 99 | } |
DeWayneDennis | 22:f46576c40722 | 100 | |
DeWayneDennis | 22:f46576c40722 | 101 | //send data every second |
DeWayneDennis | 22:f46576c40722 | 102 | if (refresh_Timer.read_ms() >= refresh_Time) { |
DeWayneDennis | 22:f46576c40722 | 103 | refresh_Timer.reset(); |
DeWayneDennis | 22:f46576c40722 | 104 | |
DeWayneDennis | 22:f46576c40722 | 105 | //pc.printf("\r\nCell Time: %s\r\n", eth.getCellTime()); |
DeWayneDennis | 22:f46576c40722 | 106 | //gather all the data to be written |
DeWayneDennis | 22:f46576c40722 | 107 | filteredLong = getFiltered(); |
DeWayneDennis | 22:f46576c40722 | 108 | filteredLongRef = getFilteredRef(); |
DeWayneDennis | 22:f46576c40722 | 109 | //time |
DeWayneDennis | 22:f46576c40722 | 110 | int hours = myGPS.hour - (6 + daylightsavings); |
DeWayneDennis | 22:f46576c40722 | 111 | int minutes = myGPS.minute; |
DeWayneDennis | 22:f46576c40722 | 112 | |
DeWayneDennis | 22:f46576c40722 | 113 | //gps |
DeWayneDennis | 22:f46576c40722 | 114 | float latitude = myGPS.latitude; |
DeWayneDennis | 22:f46576c40722 | 115 | char lat = myGPS.lat; |
DeWayneDennis | 22:f46576c40722 | 116 | float longitude = myGPS.longitude; |
DeWayneDennis | 22:f46576c40722 | 117 | char lon = myGPS.lon; |
DeWayneDennis | 22:f46576c40722 | 118 | |
DeWayneDennis | 22:f46576c40722 | 119 | |
DeWayneDennis | 22:f46576c40722 | 120 | |
DeWayneDennis | 22:f46576c40722 | 121 | //log data locally to sd card |
DeWayneDennis | 22:f46576c40722 | 122 | fpData = fopen("/sd/data.txt", "a"); |
DeWayneDennis | 22:f46576c40722 | 123 | if (fpData != NULL) { |
DeWayneDennis | 22:f46576c40722 | 124 | fprintf(fpData, "%f,", filteredLong); |
DeWayneDennis | 22:f46576c40722 | 125 | fprintf(fpData, "%f,", filteredLongRef); |
DeWayneDennis | 22:f46576c40722 | 126 | fprintf(fpData, "%f,", filteredLongRef ? (filteredLong/filteredLongRef) : 0); |
DeWayneDennis | 22:f46576c40722 | 127 | fprintf(fpData, "%02d:%02d:%02d,", hours, minutes, myGPS.seconds); |
DeWayneDennis | 22:f46576c40722 | 128 | if (myGPS.fix){ |
DeWayneDennis | 22:f46576c40722 | 129 | fprintf(fpData, "%5.2f%c,%5.2f%c\r\n", latitude, lat, longitude, lon); |
DeWayneDennis | 22:f46576c40722 | 130 | } |
DeWayneDennis | 22:f46576c40722 | 131 | else{ |
DeWayneDennis | 22:f46576c40722 | 132 | fprintf(fpData, "%5.2f%c,%5.2f%c\r\n", 0.00, 'N', 0.00, 'E'); |
DeWayneDennis | 22:f46576c40722 | 133 | } |
DeWayneDennis | 22:f46576c40722 | 134 | fclose(fpData); |
DeWayneDennis | 22:f46576c40722 | 135 | } |
DeWayneDennis | 22:f46576c40722 | 136 | //send data to google spreadsheet |
DeWayneDennis | 22:f46576c40722 | 137 | if(myGPS.fix){ |
DeWayneDennis | 22:f46576c40722 | 138 | gsm_send_data(filteredLong, filteredLongRef, hours, minutes, myGPS.seconds, latitude,lat, longitude,lon); |
DeWayneDennis | 22:f46576c40722 | 139 | }else{ |
DeWayneDennis | 22:f46576c40722 | 140 | gsm_send_data(filteredLong, filteredLongRef,hours, minutes, myGPS.seconds, 0, 0, 0, 0); |
DeWayneDennis | 22:f46576c40722 | 141 | } |
DeWayneDennis | 22:f46576c40722 | 142 | //tick the state machine |
DeWayneDennis | 22:f46576c40722 | 143 | gsm_send_data(filteredLong, filteredLongRef,0, 0, 0, 0, 0, 0, 0); |
DeWayneDennis | 22:f46576c40722 | 144 | gsm_tick(); |
DeWayneDennis | 22:f46576c40722 | 145 | } |
DeWayneDennis | 22:f46576c40722 | 146 | |
DeWayneDennis | 22:f46576c40722 | 147 | |
DeWayneDennis | 22:f46576c40722 | 148 | } |
DeWayneDennis | 22:f46576c40722 | 149 | }*/ |
DeWayneDennis | 22:f46576c40722 | 150 | // for debug purposes |
DeWayneDennis | 22:f46576c40722 | 151 | DigitalOut led_red(LED_RED); |
DeWayneDennis | 22:f46576c40722 | 152 | DigitalOut led_green(LED_GREEN); |
DeWayneDennis | 22:f46576c40722 | 153 | DigitalOut led_blue(LED_BLUE); |
DeWayneDennis | 22:f46576c40722 | 154 | |
DeWayneDennis | 22:f46576c40722 | 155 | Timer t1; |
DeWayneDennis | 22:f46576c40722 | 156 | using namespace std; |
DeWayneDennis | 22:f46576c40722 | 157 | |
DeWayneDennis | 22:f46576c40722 | 158 | |
DeWayneDennis | 21:3d922bea5d77 | 159 | #define PDB_DACINTC0_TOE 0x01 // 0x01 -> PDB DAC interal trigger enabled |
DeWayneDennis | 21:3d922bea5d77 | 160 | #define DAC0_DAT0 (uint16_t *)0x400CC000 // DAC word buffer base address |
DeWayneDennis | 21:3d922bea5d77 | 161 | |
DeWayneDennis | 21:3d922bea5d77 | 162 | void setUpDac() |
DeWayneDennis | 19:404594768414 | 163 | { |
DeWayneDennis | 21:3d922bea5d77 | 164 | SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK; // turn on clock to the DAC |
DeWayneDennis | 21:3d922bea5d77 | 165 | SIM_SCGC6 |= SIM_SCGC6_DAC0_MASK; // turn on clock to the DAC |
DeWayneDennis | 22:f46576c40722 | 166 | DAC0_C0 = 0xC0; |
DeWayneDennis | 22:f46576c40722 | 167 | //DAC0_C0 |= DAC_C0_DACEN_MASK ; // enable the DAC; must do before any of the following |
DeWayneDennis | 22:f46576c40722 | 168 | DAC0_C2 =9;//cycle through the first 10 values in the buffer |
DeWayneDennis | 22:f46576c40722 | 169 | DAC0_C1 |= 0x80;//enable the dac buffer |
DeWayneDennis | 21:3d922bea5d77 | 170 | p1 = DAC0_DAT0; |
DeWayneDennis | 21:3d922bea5d77 | 171 | for (int i = 0; i < 16; i++)//fill the buffer |
DeWayneDennis | 22:f46576c40722 | 172 | {//460, 2870 |
DeWayneDennis | 22:f46576c40722 | 173 | uint16_t value = (uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * i) * 460.0 + 2870.0); |
DeWayneDennis | 22:f46576c40722 | 174 | *p1++ = value; // 3351.0 |
DeWayneDennis | 22:f46576c40722 | 175 | printf("Pointer: %d\tValue: %d\n\r", (uint32_t)p1,value); |
DeWayneDennis | 22:f46576c40722 | 176 | } |
DeWayneDennis | 22:f46576c40722 | 177 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT0L,DAC0_DAT0H,DAC0_DAT0L|(DAC0_DAT0H<<8)); |
DeWayneDennis | 22:f46576c40722 | 178 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT1L,DAC0_DAT1H,DAC0_DAT1L|(DAC0_DAT1H<<8)); |
DeWayneDennis | 22:f46576c40722 | 179 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT2L,DAC0_DAT2H,DAC0_DAT2L|(DAC0_DAT2H<<8)); |
DeWayneDennis | 22:f46576c40722 | 180 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT3L,DAC0_DAT3H,DAC0_DAT3L|(DAC0_DAT3H<<8)); |
DeWayneDennis | 22:f46576c40722 | 181 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT4L,DAC0_DAT4H,DAC0_DAT4L|(DAC0_DAT4H<<8)); |
DeWayneDennis | 22:f46576c40722 | 182 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT5L,DAC0_DAT5H,DAC0_DAT5L|(DAC0_DAT5H<<8)); |
DeWayneDennis | 22:f46576c40722 | 183 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT6L,DAC0_DAT6H,DAC0_DAT6L|(DAC0_DAT6H<<8)); |
DeWayneDennis | 22:f46576c40722 | 184 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT7L,DAC0_DAT7H,DAC0_DAT7L|(DAC0_DAT7H<<8)); |
DeWayneDennis | 22:f46576c40722 | 185 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT8L,DAC0_DAT8H,DAC0_DAT8L|(DAC0_DAT8H<<8)); |
DeWayneDennis | 22:f46576c40722 | 186 | printf("data low: %d\tdata high: %d\tTotal: %d\n\r",DAC0_DAT9L,DAC0_DAT9H,DAC0_DAT9L|(DAC0_DAT9H<<8)); |
DeWayneDennis | 22:f46576c40722 | 187 | |
DeWayneDennis | 22:f46576c40722 | 188 | } |
DeWayneDennis | 22:f46576c40722 | 189 | int startAddress = (int)&sample_array0[0]; |
DeWayneDennis | 22:f46576c40722 | 190 | int getDestinationIndex() |
DeWayneDennis | 22:f46576c40722 | 191 | { |
DeWayneDennis | 22:f46576c40722 | 192 | if ((int)(DMA_TCD0_DADDR-startAddress)/2-1<0) |
DeWayneDennis | 22:f46576c40722 | 193 | return 1999; |
DeWayneDennis | 22:f46576c40722 | 194 | else |
DeWayneDennis | 22:f46576c40722 | 195 | return (int)(DMA_TCD0_DADDR-startAddress)/2-1; |
DeWayneDennis | 21:3d922bea5d77 | 196 | } |
DeWayneDennis | 22:f46576c40722 | 197 | int main() |
DeWayneDennis | 22:f46576c40722 | 198 | { |
DeWayneDennis | 22:f46576c40722 | 199 | Timer refresh_Timer; //sets up a timer for use in loop; how often do we print GPS info? |
DeWayneDennis | 22:f46576c40722 | 200 | const int refresh_Time = 1000; //refresh time in ms |
DeWayneDennis | 22:f46576c40722 | 201 | |
DeWayneDennis | 22:f46576c40722 | 202 | //set to 1 for daylight savings time |
DeWayneDennis | 22:f46576c40722 | 203 | int daylightsavings = 1; |
DeWayneDennis | 22:f46576c40722 | 204 | |
DeWayneDennis | 22:f46576c40722 | 205 | // GPS INITIALIZATION ////////////////////////////// |
DeWayneDennis | 22:f46576c40722 | 206 | pc.printf("Initialize GPS\r\n"); |
DeWayneDennis | 22:f46576c40722 | 207 | gps_Serial = new Serial(PTC4,PTC3); |
DeWayneDennis | 22:f46576c40722 | 208 | Adafruit_GPS myGPS(gps_Serial); |
DeWayneDennis | 22:f46576c40722 | 209 | char c; |
DeWayneDennis | 22:f46576c40722 | 210 | myGPS.begin(9600); |
DeWayneDennis | 22:f46576c40722 | 211 | myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY); |
DeWayneDennis | 22:f46576c40722 | 212 | myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); |
DeWayneDennis | 22:f46576c40722 | 213 | myGPS.sendCommand(PGCMD_ANTENNA); |
DeWayneDennis | 22:f46576c40722 | 214 | //////////////////////////////////////////////////// |
DeWayneDennis | 22:f46576c40722 | 215 | |
DeWayneDennis | 22:f46576c40722 | 216 | led_blue = 1; |
DeWayneDennis | 22:f46576c40722 | 217 | led_green = 1; |
DeWayneDennis | 22:f46576c40722 | 218 | led_red = 1; |
DeWayneDennis | 22:f46576c40722 | 219 | pre_compute_tables(); |
DeWayneDennis | 22:f46576c40722 | 220 | |
DeWayneDennis | 22:f46576c40722 | 221 | pc.printf("Starting...\r\n"); |
DeWayneDennis | 22:f46576c40722 | 222 | for(int i = 0; i < 86; i++) |
DeWayneDennis | 21:3d922bea5d77 | 223 | { |
DeWayneDennis | 21:3d922bea5d77 | 224 | if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2); |
bjcrofts | 0:d7b2716c5a4f | 225 | } |
DeWayneDennis | 21:3d922bea5d77 | 226 | |
DeWayneDennis | 21:3d922bea5d77 | 227 | // Give hardware associated with |
DeWayneDennis | 21:3d922bea5d77 | 228 | // sampling the highest priority |
DeWayneDennis | 21:3d922bea5d77 | 229 | NVIC_SetPriority(ADC1_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 230 | NVIC_SetPriority(ADC0_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 231 | NVIC_SetPriority(PDB0_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 232 | NVIC_SetPriority(DMA0_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 233 | NVIC_SetPriority(DMA1_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 234 | NVIC_SetPriority(DMA2_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 235 | |
DeWayneDennis | 21:3d922bea5d77 | 236 | NVIC_SetPriority(ENET_1588_Timer_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 237 | NVIC_SetPriority(ENET_Transmit_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 238 | NVIC_SetPriority(ENET_Receive_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 239 | NVIC_SetPriority(ENET_Error_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 240 | |
DeWayneDennis | 21:3d922bea5d77 | 241 | adc_init(); // initialize ADCs (always initialize adc before dma) |
DeWayneDennis | 21:3d922bea5d77 | 242 | setUpDac(); |
DeWayneDennis | 21:3d922bea5d77 | 243 | dma_init(); // initializes DMAs |
DeWayneDennis | 21:3d922bea5d77 | 244 | pdb_init(); // initialize PDB0 as the timer for ADCs and DMA2 |
DeWayneDennis | 21:3d922bea5d77 | 245 | |
DeWayneDennis | 22:f46576c40722 | 246 | // flash green led indicating startup complete |
DeWayneDennis | 22:f46576c40722 | 247 | led_red = 1; |
DeWayneDennis | 22:f46576c40722 | 248 | led_blue = 1; |
DeWayneDennis | 22:f46576c40722 | 249 | led_green = 0; |
DeWayneDennis | 22:f46576c40722 | 250 | pause_ms(500); |
DeWayneDennis | 22:f46576c40722 | 251 | led_green = 1; |
DeWayneDennis | 22:f46576c40722 | 252 | pause_ms(200); |
DeWayneDennis | 22:f46576c40722 | 253 | led_green = 0; |
DeWayneDennis | 22:f46576c40722 | 254 | pause_ms(500); |
DeWayneDennis | 22:f46576c40722 | 255 | led_green = 1; |
DeWayneDennis | 22:f46576c40722 | 256 | pdb_start(); |
DeWayneDennis | 21:3d922bea5d77 | 257 | |
DeWayneDennis | 22:f46576c40722 | 258 | int destinationIndex = (DMA_TCD0_DADDR-startAddress)/2; |
DeWayneDennis | 22:f46576c40722 | 259 | int currentIndex = 0; |
DeWayneDennis | 21:3d922bea5d77 | 260 | |
DeWayneDennis | 22:f46576c40722 | 261 | printf("DAC C2: %X\n\r",DAC0_C2); |
DeWayneDennis | 22:f46576c40722 | 262 | printf("DAC C0: %X\n\r",DAC0_C0); |
DeWayneDennis | 22:f46576c40722 | 263 | printf("DAC C1: %X\n\r",DAC0_C1); |
DeWayneDennis | 22:f46576c40722 | 264 | printf("DAC C2: %X\n\r",DAC0_C2); |
DeWayneDennis | 21:3d922bea5d77 | 265 | |
DeWayneDennis | 22:f46576c40722 | 266 | pc.printf("hello :)\r\n"); |
DeWayneDennis | 22:f46576c40722 | 267 | |
DeWayneDennis | 22:f46576c40722 | 268 | |
DeWayneDennis | 22:f46576c40722 | 269 | refresh_Timer.start(); //starts the clock on the timer |
DeWayneDennis | 21:3d922bea5d77 | 270 | |
DeWayneDennis | 22:f46576c40722 | 271 | //main while loop for data processing |
DeWayneDennis | 22:f46576c40722 | 272 | pc.printf("Begin Processing Data...\r\n"); |
DeWayneDennis | 22:f46576c40722 | 273 | while (1) |
DeWayneDennis | 22:f46576c40722 | 274 | { |
DeWayneDennis | 22:f46576c40722 | 275 | //filter the data stored in the DAC |
DeWayneDennis | 22:f46576c40722 | 276 | do |
DeWayneDennis | 22:f46576c40722 | 277 | { |
DeWayneDennis | 22:f46576c40722 | 278 | destinationIndex = getDestinationIndex(); |
DeWayneDennis | 22:f46576c40722 | 279 | if((int)(DMA_TCD0_DADDR-startAddress)/2 ==currentIndex-1) |
DeWayneDennis | 22:f46576c40722 | 280 | pc.printf("Buffer overrun\n\r"); |
DeWayneDennis | 22:f46576c40722 | 281 | }while (currentIndex == destinationIndex); |
DeWayneDennis | 22:f46576c40722 | 282 | |
DeWayneDennis | 21:3d922bea5d77 | 283 | while (currentIndex!=destinationIndex) |
DeWayneDennis | 21:3d922bea5d77 | 284 | { |
DeWayneDennis | 21:3d922bea5d77 | 285 | filter100K(sample_array0[currentIndex], sample_array1[currentIndex]); |
DeWayneDennis | 22:f46576c40722 | 286 | |
DeWayneDennis | 22:f46576c40722 | 287 | //send data every second |
DeWayneDennis | 22:f46576c40722 | 288 | if (refresh_Timer.read_ms() >= refresh_Time) { |
DeWayneDennis | 22:f46576c40722 | 289 | refresh_Timer.reset(); |
DeWayneDennis | 22:f46576c40722 | 290 | |
DeWayneDennis | 22:f46576c40722 | 291 | //get GPS coordinates |
DeWayneDennis | 22:f46576c40722 | 292 | c = myGPS.read(); |
DeWayneDennis | 22:f46576c40722 | 293 | if ( myGPS.newNMEAreceived() ) { |
DeWayneDennis | 22:f46576c40722 | 294 | if ( !myGPS.parse(myGPS.lastNMEA()) ) { |
DeWayneDennis | 22:f46576c40722 | 295 | //continue; |
DeWayneDennis | 22:f46576c40722 | 296 | } |
DeWayneDennis | 22:f46576c40722 | 297 | } |
DeWayneDennis | 22:f46576c40722 | 298 | //pc.printf("\r\nCell Time: %s\r\n", eth.getCellTime()); |
DeWayneDennis | 22:f46576c40722 | 299 | |
DeWayneDennis | 22:f46576c40722 | 300 | |
DeWayneDennis | 22:f46576c40722 | 301 | //time |
DeWayneDennis | 22:f46576c40722 | 302 | int hours = myGPS.hour - (6 + daylightsavings); |
DeWayneDennis | 22:f46576c40722 | 303 | int minutes = myGPS.minute; |
DeWayneDennis | 22:f46576c40722 | 304 | |
DeWayneDennis | 22:f46576c40722 | 305 | //gps |
DeWayneDennis | 22:f46576c40722 | 306 | float latitude = myGPS.latitude; |
DeWayneDennis | 22:f46576c40722 | 307 | char lat = myGPS.lat; |
DeWayneDennis | 22:f46576c40722 | 308 | float longitude = myGPS.longitude; |
DeWayneDennis | 22:f46576c40722 | 309 | char lon = myGPS.lon; |
DeWayneDennis | 22:f46576c40722 | 310 | |
DeWayneDennis | 22:f46576c40722 | 311 | //log data locally to sd card |
DeWayneDennis | 22:f46576c40722 | 312 | fpData = fopen("/sd/data.txt", "a"); |
DeWayneDennis | 22:f46576c40722 | 313 | if (fpData != NULL) { |
DeWayneDennis | 22:f46576c40722 | 314 | fprintf(fpData, "%f,", filteredLong); |
DeWayneDennis | 22:f46576c40722 | 315 | fprintf(fpData, "%f,", filteredLongRef); |
DeWayneDennis | 22:f46576c40722 | 316 | fprintf(fpData, "%f,", filteredLongRef ? (filteredLong/filteredLongRef) : 0); |
DeWayneDennis | 22:f46576c40722 | 317 | fprintf(fpData, "%02d:%02d:%02d,", hours, minutes, myGPS.seconds); |
DeWayneDennis | 22:f46576c40722 | 318 | if (myGPS.fix){ |
DeWayneDennis | 22:f46576c40722 | 319 | fprintf(fpData, "%5.2f%c,%5.2f%c\r\n", latitude, lat, longitude, lon); |
DeWayneDennis | 22:f46576c40722 | 320 | } |
DeWayneDennis | 22:f46576c40722 | 321 | else{ |
DeWayneDennis | 22:f46576c40722 | 322 | fprintf(fpData, "%5.2f%c,%5.2f%c\r\n", 0.00, 'N', 0.00, 'E'); |
DeWayneDennis | 22:f46576c40722 | 323 | } |
DeWayneDennis | 22:f46576c40722 | 324 | fclose(fpData); |
DeWayneDennis | 22:f46576c40722 | 325 | } |
DeWayneDennis | 22:f46576c40722 | 326 | //send data to google spreadsheet |
DeWayneDennis | 22:f46576c40722 | 327 | if(myGPS.fix){ |
DeWayneDennis | 22:f46576c40722 | 328 | gsm_send_data(filteredLong, filteredLongRef, hours, minutes, myGPS.seconds, latitude,lat, longitude,lon); |
DeWayneDennis | 22:f46576c40722 | 329 | }else{ |
DeWayneDennis | 22:f46576c40722 | 330 | gsm_send_data(filteredLong, filteredLongRef,hours, minutes, myGPS.seconds, 0, 0, 0, 0); |
DeWayneDennis | 22:f46576c40722 | 331 | } |
DeWayneDennis | 22:f46576c40722 | 332 | //send data once a second |
DeWayneDennis | 22:f46576c40722 | 333 | gsm_tick(); |
DeWayneDennis | 22:f46576c40722 | 334 | printf("V1: %f\tV2: %f\tRatio: %f(Mine)\n\r",filteredLong,filteredLongRef,filteredLong/filteredLongRef); |
DeWayneDennis | 22:f46576c40722 | 335 | |
DeWayneDennis | 22:f46576c40722 | 336 | } |
DeWayneDennis | 21:3d922bea5d77 | 337 | currentIndex++; |
DeWayneDennis | 22:f46576c40722 | 338 | if (currentIndex>=2000){ |
DeWayneDennis | 21:3d922bea5d77 | 339 | currentIndex = 0; |
DeWayneDennis | 22:f46576c40722 | 340 | } |
DeWayneDennis | 21:3d922bea5d77 | 341 | |
bjcrofts | 0:d7b2716c5a4f | 342 | } |
DeWayneDennis | 21:3d922bea5d77 | 343 | |
bjcrofts | 0:d7b2716c5a4f | 344 | } |
DeWayneDennis | 22:f46576c40722 | 345 | |
DeWayneDennis | 22:f46576c40722 | 346 | } |
DeWayneDennis | 22:f46576c40722 | 347 | void setFiltered(float ref){ |
DeWayneDennis | 22:f46576c40722 | 348 | filteredLong = ref; |
DeWayneDennis | 22:f46576c40722 | 349 | } |
DeWayneDennis | 22:f46576c40722 | 350 | void setFilteredRef(float ref){ |
DeWayneDennis | 22:f46576c40722 | 351 | filteredLongRef = ref; |
bjcrofts | 0:d7b2716c5a4f | 352 | } |