The official code that runs on the FRDM board for the chlorine sensor.
Dependencies: MBed_Adafruit-GPS-Library SDFileSystem mbed GSM_Library
Fork of DCS by
Diff: Sensor.cpp
- Revision:
- 8:6b4a6bcd7694
- Parent:
- 1:8614e190908b
- Child:
- 10:02e2f8400e87
--- a/Sensor.cpp Fri Mar 06 22:36:44 2015 +0000 +++ b/Sensor.cpp Tue Mar 24 17:04:31 2015 +0000 @@ -5,10 +5,18 @@ #include "SDFileSystem.h" #include "QAM.h" #include "param.h" +#include "GSMLibrary.h" +#include "stdlib.h" DigitalOut led_red(LED_RED); Serial pc(USBTX, USBRX); Timer t; +Timer z; +bool run = 0; +Serial gsm(D1,D0); + +char message[5000]; +char num[10]; /************************************************** ** SD FILE SYSTEM ** @@ -80,10 +88,14 @@ int main () { pc.baud(115200); + gsm.baud(115200); pc.printf("hello\r\n"); + //GSM INITIALIZATION /////////////////////////////// + gsm_initialize(); + // GPS INITIALIZATION ////////////////////////////// - gps_Serial = new Serial(D1,D0); + gps_Serial = new Serial(PTC4,PTC3); ////Serial gsm(D1,D0); Adafruit_GPS myGPS(gps_Serial); char c; myGPS.begin(9600); @@ -100,21 +112,20 @@ float filteredLongRef = 0; float filteredShortRef = 0; + void gsm_initialize(); + sample_tick.attach(&tick, 0.0001); t.start(); + z.start(); + + int buffer = 0; while(1){ - if(takeSample){ //3.46 us per loop + if(takeSample && z.read_ms()>1000){ - takeSample = false; dac0 = sinWave[sinIndex]; - sinIndex++; - if((sinIndex+1) > sinRes){ - sinIndex = 0; - } - lon = AnLong.read(); lonRef = AnRefLong.read(); @@ -132,17 +143,31 @@ sRefSI[sampleIndex] = shorRef*I; sRefSQ[sampleIndex] = shorRef*Q; + takeSample = false; + + sinIndex++; + if((sinIndex+1) > sinRes){ + sinIndex = 0; + } + + sampleIndex++; if(sampleIndex+1 > SAMPLE_LENGTH){ sampleIndex--; } + + } - - if(sampleIndex+2 > SAMPLE_LENGTH){ //0.50 seconds + + if(t.read_ms()>1000){//sampleIndex+2 > SAMPLE_LENGTH){ //0.50 seconds + run = 1; + z.reset(); sampleIndex = 0; + + gsm_tick(); filteredLong = QAM(sLI, sLQ, &pc); filteredLongRef = QAM(sRefLI, sRefLQ, &pc); filteredShort = QAM(sSI, sSQ, &pc); @@ -157,65 +182,72 @@ } - if(t.read_ms()>1000){ + if(run){ led_red = !led_red; - - pc.printf("Long = %f\r\n", filteredLong); - pc.printf("LongRef = %f\r\n", filteredLongRef); - pc.printf("Short = %f\r\n", filteredShort); - pc.printf("ShortRef = %f\r\n", filteredShortRef); - pc.printf("Time: %d:%d:%d \r\n", myGPS.hour, myGPS.minute, myGPS.seconds); + run = 0; - if (myGPS.fix) pc.printf("Location: %5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); + pc.printf("%f, ", filteredLong); + pc.printf("%f, ", filteredLongRef); + pc.printf("%f, ", filteredShort); + pc.printf("%f\r\n", filteredShortRef); + pc.printf("%f, ", filteredLong/filteredLongRef); + pc.printf("%f\r\n", filteredShort/filteredShortRef); + pc.printf("%d:%d:%d \r\n", myGPS.hour-6, myGPS.minute, myGPS.seconds); + + if (myGPS.fix) pc.printf("%5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); else pc.printf("No GPS fix\r\n"); pc.printf("--------------------------------\r\n"); + + fp = fopen("/sd/data.txt", "w"); if (fp != NULL){ - fprintf(fp, "Long = %f\r\n", filteredLong); - fprintf(fp, "LongRef = %f\r\n", filteredLongRef); - fprintf(fp, "Short = %f\r\n", filteredShort); - fprintf(fp, "ShortRef = %f\r\n", filteredShortRef); - fprintf(fp, "Time: %d:%d:%d \r\n", myGPS.hour, myGPS.minute, myGPS.seconds); - if (myGPS.fix) fprintf(fp, "Location: %5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); - else fprintf(fp, "No GPS fix\r\n"); + fprintf(fp, "%f, ", filteredLong); + fprintf(fp, "%f, ", filteredLongRef); + fprintf(fp, "%f, ", filteredShort); + fprintf(fp, "%f\r\n", filteredShortRef); + fprintf(fp, "%d:%d:%d\r\n", myGPS.hour, myGPS.minute, myGPS.seconds); + if (myGPS.fix) fprintf(fp, "%5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); + else fprintf(fp, "No_GPS_fix\r\n"); fclose(fp); } + snprintf(num,10,"%f, ",filteredLong); + strcat(message, num); + snprintf(num,10,"%f, ",filteredLongRef); + strcat(message, num); + snprintf(num,10,"%f, ",filteredShort); + strcat(message, num); + snprintf(num,10,"%f = ",filteredShortRef); + strcat(message, num); + + snprintf(num,10,"%d:%d:%d = ", myGPS.hour, myGPS.minute, myGPS.seconds); + strcat(message, num); + if (myGPS.fix){ + snprintf(num,10,"%5.2f%c, %5.2f%c. ", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); + strcat(message, num); + } + else strcat(message, "NO_GPS_FIX. "); + + //pc.printf("%s\r\n", message); + + if(gsm_ready()){ + gsm_send_sms(message); + memset(message, 0, 5000); + buffer = 0; + }else{ + buffer++; + if(buffer > 12){ + buffer = 0; + memset(message, 0, 5000); + } + } + t.reset(); } - - - - - /* - if (sampleIndex+2 > SAMPLE_LENGTH) { // 0.25 seconds - - sampleIndex = 0; - pc.printf("Time: %d:%d:%d \r\n", myGPS.hour, myGPS.minute, myGPS.seconds); - fp = fopen("/sd/data.txt", "w"); - if (fp != NULL){ - fprintf(fp,"Time: %d:%d:%d.%u \r\n", myGPS.hour, myGPS.minute, myGPS.seconds, myGPS.milliseconds); - fclose(fp); - } - - if (myGPS.fix) { - pc.printf("Location: %5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); - led_red = !led_red; - fp = fopen("/sd/data.txt", "w"); - if (fp != NULL){ - fprintf(fp,"Location: %5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon); - fclose(fp); - } - }else{ - fprintf(fp,"no gps fix\r\n"); - fclose(fp); - } - } - */ } } \ No newline at end of file