Final Code 12/19/2015

Dependencies:   Chemical_Sensor_DMA GPRS DPG_FINAL MBed_Adafruit-GPS-Library SDFileSystem Socket mbed

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?

UserRevisionLine numberNew 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 }