Final Code 12/19/2015
Dependencies: Chemical_Sensor_DMA GPRS DPG_FINAL MBed_Adafruit-GPS-Library SDFileSystem Socket mbed
Sensor.cpp@21:3d922bea5d77, 2015-11-06 (annotated)
- Committer:
- DeWayneDennis
- Date:
- Fri Nov 06 20:53:59 2015 +0000
- Revision:
- 21:3d922bea5d77
- Parent:
- 19:404594768414
- Child:
- 22:f46576c40722
added jared's DAC Code
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 | |
bjcrofts | 0:d7b2716c5a4f | 13 | DigitalOut led_red(LED_RED); |
bjcrofts | 0:d7b2716c5a4f | 14 | Serial pc(USBTX, USBRX); |
bjcrofts | 0:d7b2716c5a4f | 15 | Timer t; |
bjcrofts | 8:6b4a6bcd7694 | 16 | bool run = 0; |
bjcrofts | 14:97611177509b | 17 | bool fil = 0; |
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 | ** GPS ** |
bjcrofts | 0:d7b2716c5a4f | 27 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 28 | Serial * gps_Serial; |
bjcrofts | 0:d7b2716c5a4f | 29 | |
bjcrofts | 0:d7b2716c5a4f | 30 | /************************************************** |
bjcrofts | 0:d7b2716c5a4f | 31 | ** SENSOR INPUTS ** |
bjcrofts | 0:d7b2716c5a4f | 32 | **************************************************/ |
bjcrofts | 0:d7b2716c5a4f | 33 | bool takeSample = false; |
DeWayneDennis | 19:404594768414 | 34 | void tick() |
DeWayneDennis | 19:404594768414 | 35 | { |
DeWayneDennis | 19:404594768414 | 36 | takeSample = true; |
DeWayneDennis | 19:404594768414 | 37 | } |
bjcrofts | 0:d7b2716c5a4f | 38 | |
DeWayneDennis | 19:404594768414 | 39 | /*Global Variables*/ |
DeWayneDennis | 19:404594768414 | 40 | extern GPRSInterface eth; |
bjcrofts | 0:d7b2716c5a4f | 41 | |
DeWayneDennis | 19:404594768414 | 42 | /*End Global Variables*/ |
DeWayneDennis | 21:3d922bea5d77 | 43 | #define PDB_DACINTC0_TOE 0x01 // 0x01 -> PDB DAC interal trigger enabled |
DeWayneDennis | 21:3d922bea5d77 | 44 | #define DAC0_DAT0 (uint16_t *)0x400CC000 // DAC word buffer base address |
DeWayneDennis | 21:3d922bea5d77 | 45 | |
DeWayneDennis | 21:3d922bea5d77 | 46 | uint16_t *p1; |
DeWayneDennis | 21:3d922bea5d77 | 47 | void setUpDac() |
DeWayneDennis | 19:404594768414 | 48 | { |
DeWayneDennis | 21:3d922bea5d77 | 49 | SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK; // turn on clock to the DAC |
DeWayneDennis | 21:3d922bea5d77 | 50 | SIM_SCGC6 |= SIM_SCGC6_DAC0_MASK; // turn on clock to the DAC |
DeWayneDennis | 21:3d922bea5d77 | 51 | DAC0_C0 |= DAC_C0_DACEN_MASK ; // enable the DAC; must do before any of the following |
DeWayneDennis | 21:3d922bea5d77 | 52 | DAC0_C2 = 9;//cycle through the first 10 values in the buffer |
DeWayneDennis | 21:3d922bea5d77 | 53 | DAC0_C1 = 1;//enable the dac buffer |
DeWayneDennis | 21:3d922bea5d77 | 54 | p1 = DAC0_DAT0; |
DeWayneDennis | 21:3d922bea5d77 | 55 | for (int i = 0; i < 16; i++)//fill the buffer |
DeWayneDennis | 21:3d922bea5d77 | 56 | { |
DeWayneDennis | 21:3d922bea5d77 | 57 | *p1++ = (uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * i) * 460.0 + 2870.0); // 3351.0 |
DeWayneDennis | 21:3d922bea5d77 | 58 | //printf("Pointer: %d\tValue: %d\n\r", (uint32_t)p1,(int) (cos(3.14159265359 * 2 * 10000 * .00001 * i) * 800.0 + 3103.0)); |
DeWayneDennis | 21:3d922bea5d77 | 59 | } |
bjcrofts | 0:d7b2716c5a4f | 60 | |
DeWayneDennis | 21:3d922bea5d77 | 61 | } |
DeWayneDennis | 21:3d922bea5d77 | 62 | void initialize(){ |
DeWayneDennis | 21:3d922bea5d77 | 63 | for(int i = 0; i < 86; i++) |
DeWayneDennis | 21:3d922bea5d77 | 64 | { |
DeWayneDennis | 21:3d922bea5d77 | 65 | if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2); |
bjcrofts | 0:d7b2716c5a4f | 66 | } |
DeWayneDennis | 21:3d922bea5d77 | 67 | |
DeWayneDennis | 21:3d922bea5d77 | 68 | // Give hardware associated with |
DeWayneDennis | 21:3d922bea5d77 | 69 | // sampling the highest priority |
DeWayneDennis | 21:3d922bea5d77 | 70 | NVIC_SetPriority(ADC1_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 71 | NVIC_SetPriority(ADC0_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 72 | NVIC_SetPriority(PDB0_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 73 | NVIC_SetPriority(DMA0_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 74 | NVIC_SetPriority(DMA1_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 75 | NVIC_SetPriority(DMA2_IRQn,0); |
DeWayneDennis | 21:3d922bea5d77 | 76 | |
DeWayneDennis | 21:3d922bea5d77 | 77 | NVIC_SetPriority(ENET_1588_Timer_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 78 | NVIC_SetPriority(ENET_Transmit_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 79 | NVIC_SetPriority(ENET_Receive_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 80 | NVIC_SetPriority(ENET_Error_IRQn,1); |
DeWayneDennis | 21:3d922bea5d77 | 81 | |
DeWayneDennis | 21:3d922bea5d77 | 82 | adc_init(); // initialize ADCs (always initialize adc before dma) |
DeWayneDennis | 21:3d922bea5d77 | 83 | setUpDac(); |
DeWayneDennis | 21:3d922bea5d77 | 84 | dma_init(); // initializes DMAs |
DeWayneDennis | 21:3d922bea5d77 | 85 | pdb_init(); // initialize PDB0 as the timer for ADCs and DMA2 |
DeWayneDennis | 21:3d922bea5d77 | 86 | |
DeWayneDennis | 21:3d922bea5d77 | 87 | pdb_start(); |
bjcrofts | 0:d7b2716c5a4f | 88 | } |
DeWayneDennis | 19:404594768414 | 89 | int main () |
DeWayneDennis | 19:404594768414 | 90 | { |
DeWayneDennis | 21:3d922bea5d77 | 91 | pc.printf("hello!!!\r\n"); |
DeWayneDennis | 21:3d922bea5d77 | 92 | |
DeWayneDennis | 21:3d922bea5d77 | 93 | initialize(); |
DeWayneDennis | 21:3d922bea5d77 | 94 | |
bjcrofts | 0:d7b2716c5a4f | 95 | // GPS INITIALIZATION ////////////////////////////// |
bjcrofts | 8:6b4a6bcd7694 | 96 | gps_Serial = new Serial(PTC4,PTC3); ////Serial gsm(D1,D0); |
DeWayneDennis | 21:3d922bea5d77 | 97 | |
bjcrofts | 0:d7b2716c5a4f | 98 | Adafruit_GPS myGPS(gps_Serial); |
bjcrofts | 0:d7b2716c5a4f | 99 | char c; |
DeWayneDennis | 21:3d922bea5d77 | 100 | /* myGPS.begin(9600); |
bjcrofts | 0:d7b2716c5a4f | 101 | myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); |
bjcrofts | 0:d7b2716c5a4f | 102 | myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); |
DeWayneDennis | 21:3d922bea5d77 | 103 | myGPS.sendCommand(PGCMD_ANTENNA);*/ |
bjcrofts | 0:d7b2716c5a4f | 104 | //////////////////////////////////////////////////// |
DeWayneDennis | 21:3d922bea5d77 | 105 | |
DeWayneDennis | 21:3d922bea5d77 | 106 | pc.printf("Compute Tables\r\n"); |
DeWayneDennis | 21:3d922bea5d77 | 107 | |
DeWayneDennis | 21:3d922bea5d77 | 108 | pre_compute_tables(); |
DeWayneDennis | 21:3d922bea5d77 | 109 | |
DeWayneDennis | 21:3d922bea5d77 | 110 | int startAddress = (int)&sample_array0[0]; |
DeWayneDennis | 21:3d922bea5d77 | 111 | int destinationIndex = (DMA_TCD0_DADDR-startAddress)/2; |
DeWayneDennis | 21:3d922bea5d77 | 112 | int currentIndex; |
DeWayneDennis | 21:3d922bea5d77 | 113 | |
DeWayneDennis | 21:3d922bea5d77 | 114 | pc.printf("Compute Tables\r\n"); |
bjcrofts | 0:d7b2716c5a4f | 115 | float filteredLong = 0; |
bjcrofts | 0:d7b2716c5a4f | 116 | float filteredLongRef = 0; |
DeWayneDennis | 19:404594768414 | 117 | |
DeWayneDennis | 21:3d922bea5d77 | 118 | |
DeWayneDennis | 19:404594768414 | 119 | fpData = fopen("/sd/data.txt", "a"); |
DeWayneDennis | 19:404594768414 | 120 | if (fpData != NULL) { |
DeWayneDennis | 19:404594768414 | 121 | fprintf(fpData, "--------------- DCS ------------------"); |
bjcrofts | 14:97611177509b | 122 | } |
DeWayneDennis | 21:3d922bea5d77 | 123 | pc.printf("Start While Loop\r\n"); |
DeWayneDennis | 19:404594768414 | 124 | |
DeWayneDennis | 19:404594768414 | 125 | while(1) { |
DeWayneDennis | 21:3d922bea5d77 | 126 | destinationIndex = (DMA_TCD0_DADDR-startAddress)/2; |
DeWayneDennis | 21:3d922bea5d77 | 127 | while (currentIndex!=destinationIndex) |
DeWayneDennis | 21:3d922bea5d77 | 128 | { |
DeWayneDennis | 21:3d922bea5d77 | 129 | filter100K(sample_array0[currentIndex], sample_array1[currentIndex]); |
DeWayneDennis | 21:3d922bea5d77 | 130 | currentIndex++; |
DeWayneDennis | 21:3d922bea5d77 | 131 | if (currentIndex>=2000) |
DeWayneDennis | 21:3d922bea5d77 | 132 | currentIndex = 0; |
DeWayneDennis | 21:3d922bea5d77 | 133 | |
bjcrofts | 0:d7b2716c5a4f | 134 | } |
DeWayneDennis | 21:3d922bea5d77 | 135 | |
bjcrofts | 0:d7b2716c5a4f | 136 | c = myGPS.read(); |
bjcrofts | 0:d7b2716c5a4f | 137 | if ( myGPS.newNMEAreceived() ) { |
bjcrofts | 0:d7b2716c5a4f | 138 | if ( !myGPS.parse(myGPS.lastNMEA()) ) { |
DeWayneDennis | 19:404594768414 | 139 | //continue; |
bjcrofts | 0:d7b2716c5a4f | 140 | } |
bjcrofts | 0:d7b2716c5a4f | 141 | } |
DeWayneDennis | 21:3d922bea5d77 | 142 | gsm_tick(); |
DeWayneDennis | 21:3d922bea5d77 | 143 | filteredLong = getFiltered(); |
DeWayneDennis | 21:3d922bea5d77 | 144 | filteredLongRef = getFilteredRef(); |
DeWayneDennis | 21:3d922bea5d77 | 145 | run = 1; |
DeWayneDennis | 21:3d922bea5d77 | 146 | |
DeWayneDennis | 19:404594768414 | 147 | if(run) { |
bjcrofts | 0:d7b2716c5a4f | 148 | led_red = !led_red; |
bjcrofts | 8:6b4a6bcd7694 | 149 | run = 0; |
DeWayneDennis | 19:404594768414 | 150 | |
DeWayneDennis | 21:3d922bea5d77 | 151 | printf("%f, ", filteredLong); |
DeWayneDennis | 21:3d922bea5d77 | 152 | printf("%f, ", filteredLongRef); |
DeWayneDennis | 21:3d922bea5d77 | 153 | printf("%f\r\n", filteredLong/filteredLongRef); |
DeWayneDennis | 21:3d922bea5d77 | 154 | printf("%02d:%02d:%02d \r\n", myGPS.hour-6, myGPS.minute, myGPS.seconds); |
DeWayneDennis | 19:404594768414 | 155 | |
DeWayneDennis | 21:3d922bea5d77 | 156 | if (myGPS.fix) printf("%5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); |
DeWayneDennis | 21:3d922bea5d77 | 157 | else printf("No GPS fix\r\n"); |
DeWayneDennis | 21:3d922bea5d77 | 158 | printf("--------------------------------\r\n"); |
DeWayneDennis | 19:404594768414 | 159 | |
DeWayneDennis | 19:404594768414 | 160 | fpData = fopen("/sd/data.txt", "a"); |
DeWayneDennis | 19:404594768414 | 161 | if (fpData != NULL) { |
DeWayneDennis | 19:404594768414 | 162 | fprintf(fpData, "%f, ", filteredLong); |
DeWayneDennis | 19:404594768414 | 163 | fprintf(fpData, "%f\r\n", filteredLongRef); |
DeWayneDennis | 19:404594768414 | 164 | fprintf(fpData, "%02d:%02d:%02d\r\n", myGPS.hour-6, myGPS.minute, myGPS.seconds); |
DeWayneDennis | 19:404594768414 | 165 | if (myGPS.fix) fprintf(fpData, "%5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); |
DeWayneDennis | 19:404594768414 | 166 | fclose(fpData); |
DeWayneDennis | 19:404594768414 | 167 | } |
DeWayneDennis | 19:404594768414 | 168 | if(myGPS.fix) |
DeWayneDennis | 19:404594768414 | 169 | gsm_send_data(filteredLong, filteredLongRef, myGPS.hour-6, myGPS.minute, myGPS.seconds, myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); |
DeWayneDennis | 19:404594768414 | 170 | else |
DeWayneDennis | 19:404594768414 | 171 | gsm_send_data(filteredLong, filteredLongRef,myGPS.hour-6, myGPS.minute, myGPS.seconds, 0, 0, 0, 0); |
DeWayneDennis | 19:404594768414 | 172 | } |
DeWayneDennis | 21:3d922bea5d77 | 173 | |
bjcrofts | 0:d7b2716c5a4f | 174 | } |
bjcrofts | 0:d7b2716c5a4f | 175 | } |