draft2

Dependencies:   ARCH_GPRS_V2_HW Blinker GPRSInterface HTTPClient_GPRS RTC_WorkingLibrary SDFileSystem USBDevice mbed

Committer:
mbotkinl
Date:
Tue May 05 19:07:02 2015 +0000
Revision:
0:77d82c39b97c
second draft of code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbotkinl 0:77d82c39b97c 1 //SEED Team 20 Final Code draft 1 4/16/15
mbotkinl 0:77d82c39b97c 2
mbotkinl 0:77d82c39b97c 3 #include "mbed.h"
mbotkinl 0:77d82c39b97c 4 #include "SDFileSystem.h"
mbotkinl 0:77d82c39b97c 5 #include "ARCH_GPRS_V2_HW.h"
mbotkinl 0:77d82c39b97c 6 #include "HTTPClient.h"
mbotkinl 0:77d82c39b97c 7 #include "GPRSInterface.h"
mbotkinl 0:77d82c39b97c 8 #include "Blinker.h"
mbotkinl 0:77d82c39b97c 9 #include "DHT.h"
mbotkinl 0:77d82c39b97c 10 #include "i2c_uart.h"
mbotkinl 0:77d82c39b97c 11 #include "ARCH_GPRS_Sleep.h"
mbotkinl 0:77d82c39b97c 12 #include "ds1307.h"
mbotkinl 0:77d82c39b97c 13 #include "USBSerial.h"
mbotkinl 0:77d82c39b97c 14 #include <string>
mbotkinl 0:77d82c39b97c 15
mbotkinl 0:77d82c39b97c 16 #define PIN_TX P1_27
mbotkinl 0:77d82c39b97c 17 #define PIN_RX P1_26
mbotkinl 0:77d82c39b97c 18
mbotkinl 0:77d82c39b97c 19 #define SDA P0_5
mbotkinl 0:77d82c39b97c 20 #define SCL P0_4
mbotkinl 0:77d82c39b97c 21
mbotkinl 0:77d82c39b97c 22
mbotkinl 0:77d82c39b97c 23 #define BROADCAST_TIME 300
mbotkinl 0:77d82c39b97c 24
mbotkinl 0:77d82c39b97c 25 USBSerial pc;
mbotkinl 0:77d82c39b97c 26
mbotkinl 0:77d82c39b97c 27 //LED Blink
mbotkinl 0:77d82c39b97c 28 DigitalOut line11(P0_9);
mbotkinl 0:77d82c39b97c 29 DigitalOut line13(P0_2);
mbotkinl 0:77d82c39b97c 30 DigitalOut line14(P1_28);
mbotkinl 0:77d82c39b97c 31
mbotkinl 0:77d82c39b97c 32 Blinker yellowLED(LED1), redLED(LED2), greenLED(LED3), blueLED(LED4);
mbotkinl 0:77d82c39b97c 33
mbotkinl 0:77d82c39b97c 34 //USBSerial pc;
mbotkinl 0:77d82c39b97c 35 SDFileSystem sd(P1_22, P1_21, P1_20, P1_23, "sd"); // the pinout on the /Arch GPRS v2 mbed board.
mbotkinl 0:77d82c39b97c 36 char filename[60];
mbotkinl 0:77d82c39b97c 37
mbotkinl 0:77d82c39b97c 38 //RTC
mbotkinl 0:77d82c39b97c 39 DS1307 rtc(SDA,SCL);
mbotkinl 0:77d82c39b97c 40 int sec, minute, hours, day, date, month, year;
mbotkinl 0:77d82c39b97c 41 char timestamp[17];
mbotkinl 0:77d82c39b97c 42
mbotkinl 0:77d82c39b97c 43 //variables for reading data from SD card
mbotkinl 0:77d82c39b97c 44 char APIKey[17];
mbotkinl 0:77d82c39b97c 45 char sensors[3][5];
mbotkinl 0:77d82c39b97c 46 char sensorBuff[5];
mbotkinl 0:77d82c39b97c 47 int tempField, humField, lightField;
mbotkinl 0:77d82c39b97c 48 int field1, field2, field3;
mbotkinl 0:77d82c39b97c 49 int numSensors;
mbotkinl 0:77d82c39b97c 50 bool tempSensorflag=false, lightSensorflag=false, SomeotherSensorflag=false;
mbotkinl 0:77d82c39b97c 51
mbotkinl 0:77d82c39b97c 52 //GPRS setup
mbotkinl 0:77d82c39b97c 53 GPRSInterface gprs(PIN_TX,PIN_RX,115200,"internetd.gdsp",NULL,NULL);
mbotkinl 0:77d82c39b97c 54 HTTPClient http;
mbotkinl 0:77d82c39b97c 55 char* thingSpeakUrl = "http://api.thingspeak.com/update";
mbotkinl 0:77d82c39b97c 56 char urlBuffer[256];
mbotkinl 0:77d82c39b97c 57 char str[1024];
mbotkinl 0:77d82c39b97c 58 //char errorR[1024];
mbotkinl 0:77d82c39b97c 59 string errorR;
mbotkinl 0:77d82c39b97c 60
mbotkinl 0:77d82c39b97c 61 //Sensors
mbotkinl 0:77d82c39b97c 62 //DHT sensor(P1_14,SEN51035P);
mbotkinl 0:77d82c39b97c 63 DHT sensor(P1_14,SEN11301P);
mbotkinl 0:77d82c39b97c 64 AnalogIn lightSensor(P0_12);
mbotkinl 0:77d82c39b97c 65
mbotkinl 0:77d82c39b97c 66
mbotkinl 0:77d82c39b97c 67 int tempData,humData, lightData;
mbotkinl 0:77d82c39b97c 68
mbotkinl 0:77d82c39b97c 69
mbotkinl 0:77d82c39b97c 70 void connectGPRS(void) {
mbotkinl 0:77d82c39b97c 71 iot_hw.init(); // power on SIM900
mbotkinl 0:77d82c39b97c 72
mbotkinl 0:77d82c39b97c 73 int count = 0;
mbotkinl 0:77d82c39b97c 74 while(false == gprs.connect() && count < 5) {
mbotkinl 0:77d82c39b97c 75 wait(2);
mbotkinl 0:77d82c39b97c 76 count += 1;
mbotkinl 0:77d82c39b97c 77 }
mbotkinl 0:77d82c39b97c 78 }
mbotkinl 0:77d82c39b97c 79
mbotkinl 0:77d82c39b97c 80 void getTempHumid(int* tempData,int* humData){
mbotkinl 0:77d82c39b97c 81 int err = 1;
mbotkinl 0:77d82c39b97c 82 int count = 0;
mbotkinl 0:77d82c39b97c 83 iot_hw.grovePwrOn();
mbotkinl 0:77d82c39b97c 84 wait(1); // wait 1 second for device stable status
mbotkinl 0:77d82c39b97c 85 while (err != 0 && count < 4) {
mbotkinl 0:77d82c39b97c 86 err = sensor.readData();
mbotkinl 0:77d82c39b97c 87 count += 1;
mbotkinl 0:77d82c39b97c 88 *tempData = sensor.ReadTemperature(FARENHEIT);
mbotkinl 0:77d82c39b97c 89 *humData = sensor.ReadHumidity();
mbotkinl 0:77d82c39b97c 90
mbotkinl 0:77d82c39b97c 91 wait(1);
mbotkinl 0:77d82c39b97c 92 }
mbotkinl 0:77d82c39b97c 93 iot_hw.grovePwrOff();
mbotkinl 0:77d82c39b97c 94 }
mbotkinl 0:77d82c39b97c 95
mbotkinl 0:77d82c39b97c 96 void getLightReading(int* lightData)
mbotkinl 0:77d82c39b97c 97 {
mbotkinl 0:77d82c39b97c 98 *lightData = lightSensor*1000;
mbotkinl 0:77d82c39b97c 99 }
mbotkinl 0:77d82c39b97c 100
mbotkinl 0:77d82c39b97c 101
mbotkinl 0:77d82c39b97c 102 int ReadFile (void) {
mbotkinl 0:77d82c39b97c 103 mkdir("/sd", 0777); // All other times open file in append mode
mbotkinl 0:77d82c39b97c 104 FILE *fp = fopen("/sd/config.txt","r");
mbotkinl 0:77d82c39b97c 105 if (fp==NULL) {
mbotkinl 0:77d82c39b97c 106 fclose(fp);
mbotkinl 0:77d82c39b97c 107 return 0;
mbotkinl 0:77d82c39b97c 108
mbotkinl 0:77d82c39b97c 109 } else if (fp) {
mbotkinl 0:77d82c39b97c 110 //fscanf(fp,"%16c %d %s %s", APIKey, &numSensors, sensors[0],sensors[1]);
mbotkinl 0:77d82c39b97c 111 fscanf(fp,"%16c",APIKey);
mbotkinl 0:77d82c39b97c 112
mbotkinl 0:77d82c39b97c 113 // pc.printf("APIKEY= %s\r\n",APIKey);
mbotkinl 0:77d82c39b97c 114 //
mbotkinl 0:77d82c39b97c 115 fscanf(fp,"%d",&numSensors);
mbotkinl 0:77d82c39b97c 116 // pc.printf("number of sensors = %d \r\n",numSensors);
mbotkinl 0:77d82c39b97c 117 //
mbotkinl 0:77d82c39b97c 118 for (int i = 0; i<numSensors;i=i+1) {
mbotkinl 0:77d82c39b97c 119 fscanf(fp,"%s",sensors[i]);
mbotkinl 0:77d82c39b97c 120 //fscanf(fp,"%s",sensorBuff);
mbotkinl 0:77d82c39b97c 121 strcpy(sensors[i],sensorBuff);
mbotkinl 0:77d82c39b97c 122 //pc.printf("sensor %d = %s\r\n",i,sensors[i]);
mbotkinl 0:77d82c39b97c 123 }
mbotkinl 0:77d82c39b97c 124
mbotkinl 0:77d82c39b97c 125
mbotkinl 0:77d82c39b97c 126 fclose(fp);
mbotkinl 0:77d82c39b97c 127 return 1;
mbotkinl 0:77d82c39b97c 128
mbotkinl 0:77d82c39b97c 129 } else {
mbotkinl 0:77d82c39b97c 130 fclose(fp);
mbotkinl 0:77d82c39b97c 131 return 0;
mbotkinl 0:77d82c39b97c 132 }
mbotkinl 0:77d82c39b97c 133
mbotkinl 0:77d82c39b97c 134 }
mbotkinl 0:77d82c39b97c 135
mbotkinl 0:77d82c39b97c 136 bool stringComparison (const char *string1, const char *string2) {
mbotkinl 0:77d82c39b97c 137 int count = 0;
mbotkinl 0:77d82c39b97c 138 while (string1[count] != 0) {
mbotkinl 0:77d82c39b97c 139 if (string1[count] != string2[count])
mbotkinl 0:77d82c39b97c 140 return false;
mbotkinl 0:77d82c39b97c 141 count++;
mbotkinl 0:77d82c39b97c 142 }
mbotkinl 0:77d82c39b97c 143 return true;
mbotkinl 0:77d82c39b97c 144 }
mbotkinl 0:77d82c39b97c 145
mbotkinl 0:77d82c39b97c 146
mbotkinl 0:77d82c39b97c 147 void sendData1(int sensor1Data, int field1) {
mbotkinl 0:77d82c39b97c 148 connectGPRS();
mbotkinl 0:77d82c39b97c 149 urlBuffer[0] = 0;
mbotkinl 0:77d82c39b97c 150 sprintf(urlBuffer, "%s?key=%s&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data);
mbotkinl 0:77d82c39b97c 151 HTTPResult res = http.get(urlBuffer, str,128);
mbotkinl 0:77d82c39b97c 152 if (res != HTTP_OK) {
mbotkinl 0:77d82c39b97c 153 redLED.blink(5);
mbotkinl 0:77d82c39b97c 154 } else {
mbotkinl 0:77d82c39b97c 155 greenLED.blink(5);
mbotkinl 0:77d82c39b97c 156 }
mbotkinl 0:77d82c39b97c 157
mbotkinl 0:77d82c39b97c 158
mbotkinl 0:77d82c39b97c 159 iot_hw.init_io(); //power down SIM900
mbotkinl 0:77d82c39b97c 160 }
mbotkinl 0:77d82c39b97c 161
mbotkinl 0:77d82c39b97c 162 void sendData2(int sensor1Data, int field1, int sensor2Data, int field2) {
mbotkinl 0:77d82c39b97c 163 connectGPRS();
mbotkinl 0:77d82c39b97c 164 urlBuffer[0] = 0;
mbotkinl 0:77d82c39b97c 165 sprintf(urlBuffer, "%s?key=%s&field%d=%d&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data, field2, sensor2Data);
mbotkinl 0:77d82c39b97c 166 HTTPResult res = http.get(urlBuffer, str,128);
mbotkinl 0:77d82c39b97c 167 if (res != HTTP_OK) {
mbotkinl 0:77d82c39b97c 168 redLED.blink(5);
mbotkinl 0:77d82c39b97c 169 } else {
mbotkinl 0:77d82c39b97c 170 greenLED.blink(5);
mbotkinl 0:77d82c39b97c 171 }
mbotkinl 0:77d82c39b97c 172 iot_hw.init_io(); //power down SIM900
mbotkinl 0:77d82c39b97c 173 }
mbotkinl 0:77d82c39b97c 174
mbotkinl 0:77d82c39b97c 175 void sendData3(int sensor1Data, int field1, int sensor2Data, int field2, int sensor3Data, int field3) {
mbotkinl 0:77d82c39b97c 176 connectGPRS();
mbotkinl 0:77d82c39b97c 177 urlBuffer[0] = 0;
mbotkinl 0:77d82c39b97c 178 sprintf(urlBuffer, "%s?key=%s&field%d=%d&field%d=%d&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data, field2, sensor2Data, field3, sensor3Data);
mbotkinl 0:77d82c39b97c 179 HTTPResult res = http.get(urlBuffer, str,128);
mbotkinl 0:77d82c39b97c 180 if (res != HTTP_OK) {
mbotkinl 0:77d82c39b97c 181 redLED.blink(5);
mbotkinl 0:77d82c39b97c 182 } else {
mbotkinl 0:77d82c39b97c 183 greenLED.blink(5);
mbotkinl 0:77d82c39b97c 184 }
mbotkinl 0:77d82c39b97c 185 iot_hw.init_io(); //power down SIM900
mbotkinl 0:77d82c39b97c 186 }
mbotkinl 0:77d82c39b97c 187
mbotkinl 0:77d82c39b97c 188 //void errorWrite(const char* errorReport) {
mbotkinl 0:77d82c39b97c 189 void errorWrite(string errorReport) {
mbotkinl 0:77d82c39b97c 190 rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
mbotkinl 0:77d82c39b97c 191 sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
mbotkinl 0:77d82c39b97c 192
mbotkinl 0:77d82c39b97c 193 mkdir("/sd", 0777);
mbotkinl 0:77d82c39b97c 194 FILE *fp = fopen("/sd/ErrorLog.txt","a");
mbotkinl 0:77d82c39b97c 195 if (fp == NULL) {
mbotkinl 0:77d82c39b97c 196 //no sd card
mbotkinl 0:77d82c39b97c 197 redLED.blink(10);
mbotkinl 0:77d82c39b97c 198 } else {
mbotkinl 0:77d82c39b97c 199 pc.printf("%s: %s \r\n",timestamp,errorReport);
mbotkinl 0:77d82c39b97c 200 fprintf(fp,"%s: %s \r\n",timestamp,errorReport);
mbotkinl 0:77d82c39b97c 201 fclose(fp);
mbotkinl 0:77d82c39b97c 202 blueLED.blink(5);
mbotkinl 0:77d82c39b97c 203 }
mbotkinl 0:77d82c39b97c 204 }
mbotkinl 0:77d82c39b97c 205
mbotkinl 0:77d82c39b97c 206 void sdWrite1(int sensor1Data)
mbotkinl 0:77d82c39b97c 207 {
mbotkinl 0:77d82c39b97c 208 rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
mbotkinl 0:77d82c39b97c 209 sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
mbotkinl 0:77d82c39b97c 210
mbotkinl 0:77d82c39b97c 211 mkdir("/sd", 0777);
mbotkinl 0:77d82c39b97c 212 FILE *fp = fopen("/sd/node1.csv","a");
mbotkinl 0:77d82c39b97c 213 if (fp == NULL) {
mbotkinl 0:77d82c39b97c 214 //no sd card
mbotkinl 0:77d82c39b97c 215 redLED.blink(10);
mbotkinl 0:77d82c39b97c 216 } else {
mbotkinl 0:77d82c39b97c 217
mbotkinl 0:77d82c39b97c 218 fprintf(fp,"%s, %d \r\n",timestamp,sensor1Data);
mbotkinl 0:77d82c39b97c 219 fclose(fp);
mbotkinl 0:77d82c39b97c 220 blueLED.blink(5);
mbotkinl 0:77d82c39b97c 221 }
mbotkinl 0:77d82c39b97c 222 }
mbotkinl 0:77d82c39b97c 223
mbotkinl 0:77d82c39b97c 224 void sdWrite2(int sensor1Data, int sensor2Data)
mbotkinl 0:77d82c39b97c 225 {
mbotkinl 0:77d82c39b97c 226 rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
mbotkinl 0:77d82c39b97c 227 sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
mbotkinl 0:77d82c39b97c 228
mbotkinl 0:77d82c39b97c 229 mkdir("/sd", 0777);
mbotkinl 0:77d82c39b97c 230 FILE *fp = fopen("/sd/node1.csv","a");
mbotkinl 0:77d82c39b97c 231 if (fp == NULL) {
mbotkinl 0:77d82c39b97c 232 //no sd card
mbotkinl 0:77d82c39b97c 233 redLED.blink(10);
mbotkinl 0:77d82c39b97c 234 } else {
mbotkinl 0:77d82c39b97c 235
mbotkinl 0:77d82c39b97c 236 fprintf(fp,"%s, %d, %d\r\n",timestamp, sensor1Data, sensor2Data);
mbotkinl 0:77d82c39b97c 237 fclose(fp);
mbotkinl 0:77d82c39b97c 238 blueLED.blink(5);
mbotkinl 0:77d82c39b97c 239 }
mbotkinl 0:77d82c39b97c 240 }
mbotkinl 0:77d82c39b97c 241
mbotkinl 0:77d82c39b97c 242 void sdWrite3(int sensor1Data, int sensor2Data,int sensor3Data)
mbotkinl 0:77d82c39b97c 243 {
mbotkinl 0:77d82c39b97c 244 rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
mbotkinl 0:77d82c39b97c 245 sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
mbotkinl 0:77d82c39b97c 246
mbotkinl 0:77d82c39b97c 247 mkdir("/sd", 0777);
mbotkinl 0:77d82c39b97c 248 FILE *fp = fopen("/sd/node1.csv","a");
mbotkinl 0:77d82c39b97c 249 if (fp == NULL) {
mbotkinl 0:77d82c39b97c 250 //no sd card
mbotkinl 0:77d82c39b97c 251 redLED.blink(10);
mbotkinl 0:77d82c39b97c 252 } else {
mbotkinl 0:77d82c39b97c 253
mbotkinl 0:77d82c39b97c 254 fprintf(fp,"%s, %d, %d, %d\r\n",timestamp, sensor1Data, sensor2Data, sensor3Data);
mbotkinl 0:77d82c39b97c 255 fclose(fp);
mbotkinl 0:77d82c39b97c 256 blueLED.blink(5);
mbotkinl 0:77d82c39b97c 257 }
mbotkinl 0:77d82c39b97c 258 }
mbotkinl 0:77d82c39b97c 259
mbotkinl 0:77d82c39b97c 260
mbotkinl 0:77d82c39b97c 261
mbotkinl 0:77d82c39b97c 262
mbotkinl 0:77d82c39b97c 263 int main() {
mbotkinl 0:77d82c39b97c 264 wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC); //set up sleep
mbotkinl 0:77d82c39b97c 265
mbotkinl 0:77d82c39b97c 266
mbotkinl 0:77d82c39b97c 267
mbotkinl 0:77d82c39b97c 268 //test of breadboard
mbotkinl 0:77d82c39b97c 269 // while (1) {
mbotkinl 0:77d82c39b97c 270 // //rtc test
mbotkinl 0:77d82c39b97c 271 // errorR="Test rtc";
mbotkinl 0:77d82c39b97c 272 // rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
mbotkinl 0:77d82c39b97c 273 // sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
mbotkinl 0:77d82c39b97c 274 // pc.printf("%s: %s\r\n",timestamp,errorR);
mbotkinl 0:77d82c39b97c 275 //
mbotkinl 0:77d82c39b97c 276 // //rgb test
mbotkinl 0:77d82c39b97c 277 // int n=5;
mbotkinl 0:77d82c39b97c 278 // int t=1;
mbotkinl 0:77d82c39b97c 279 // pc.printf("line11 blink\r\n");
mbotkinl 0:77d82c39b97c 280 // for (int i = 0; i < n; i++) {
mbotkinl 0:77d82c39b97c 281 // line11 = 1;
mbotkinl 0:77d82c39b97c 282 // wait(t);
mbotkinl 0:77d82c39b97c 283 // line11 = 0;
mbotkinl 0:77d82c39b97c 284 // wait(t);
mbotkinl 0:77d82c39b97c 285 // }
mbotkinl 0:77d82c39b97c 286 //
mbotkinl 0:77d82c39b97c 287 // pc.printf("line13 blink\r\n");
mbotkinl 0:77d82c39b97c 288 //
mbotkinl 0:77d82c39b97c 289 // for (int i = 0; i < n; i++) {
mbotkinl 0:77d82c39b97c 290 // line13 = 1;
mbotkinl 0:77d82c39b97c 291 // wait(t);
mbotkinl 0:77d82c39b97c 292 // line13 = 0;
mbotkinl 0:77d82c39b97c 293 // wait(t);
mbotkinl 0:77d82c39b97c 294 // }
mbotkinl 0:77d82c39b97c 295 //
mbotkinl 0:77d82c39b97c 296 // pc.printf("line11 blink\r\n");
mbotkinl 0:77d82c39b97c 297 //
mbotkinl 0:77d82c39b97c 298 // for (int i = 0; i < n; i++) {
mbotkinl 0:77d82c39b97c 299 // line14 = 1;
mbotkinl 0:77d82c39b97c 300 // wait(t);
mbotkinl 0:77d82c39b97c 301 // line14 = 0;
mbotkinl 0:77d82c39b97c 302 // wait(t);
mbotkinl 0:77d82c39b97c 303 // }
mbotkinl 0:77d82c39b97c 304 // //light sensor test
mbotkinl 0:77d82c39b97c 305 // getLightReading(&lightData);
mbotkinl 0:77d82c39b97c 306 // pc.printf("light reading: %d \r\n",lightData);
mbotkinl 0:77d82c39b97c 307 //
mbotkinl 0:77d82c39b97c 308 // wait(15);
mbotkinl 0:77d82c39b97c 309 // }
mbotkinl 0:77d82c39b97c 310
mbotkinl 0:77d82c39b97c 311
mbotkinl 0:77d82c39b97c 312 //read SD card
mbotkinl 0:77d82c39b97c 313 while (ReadFile()==0) {
mbotkinl 0:77d82c39b97c 314 wait(5);
mbotkinl 0:77d82c39b97c 315 redLED.blink(10);
mbotkinl 0:77d82c39b97c 316 }
mbotkinl 0:77d82c39b97c 317 greenLED.blink(10);
mbotkinl 0:77d82c39b97c 318
mbotkinl 0:77d82c39b97c 319
mbotkinl 0:77d82c39b97c 320 //identify sensors and find order of fields
mbotkinl 0:77d82c39b97c 321 int field=1;
mbotkinl 0:77d82c39b97c 322 for (int i=0;i<numSensors;i=i+1) {
mbotkinl 0:77d82c39b97c 323 if (stringComparison(sensors[i],"temp")==true) {
mbotkinl 0:77d82c39b97c 324 tempSensorflag=true;
mbotkinl 0:77d82c39b97c 325 tempField=field;
mbotkinl 0:77d82c39b97c 326 humField=field+1;
mbotkinl 0:77d82c39b97c 327 field=field+1;
mbotkinl 0:77d82c39b97c 328 } else if (stringComparison(sensors[i],"light")==true) {
mbotkinl 0:77d82c39b97c 329 lightSensorflag=true;
mbotkinl 0:77d82c39b97c 330 lightField=field;
mbotkinl 0:77d82c39b97c 331 } else if (stringComparison(sensors[i],"some other sensor")==true) {
mbotkinl 0:77d82c39b97c 332 SomeotherSensorflag=true;
mbotkinl 0:77d82c39b97c 333 }
mbotkinl 0:77d82c39b97c 334 field=field+1;
mbotkinl 0:77d82c39b97c 335 }
mbotkinl 0:77d82c39b97c 336
mbotkinl 0:77d82c39b97c 337 //set up CSV file
mbotkinl 0:77d82c39b97c 338 mkdir("/sd", 0777);
mbotkinl 0:77d82c39b97c 339 rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
mbotkinl 0:77d82c39b97c 340 sprintf(filename,"/sd/DataLog_20%.2d.%.2d.%.2d_%.2d.%.2d.csv",year, month, date, hours, minute);
mbotkinl 0:77d82c39b97c 341 FILE *fp = fopen(filename,"a");
mbotkinl 0:77d82c39b97c 342 if (fp == NULL) {
mbotkinl 0:77d82c39b97c 343 //no sd card
mbotkinl 0:77d82c39b97c 344 redLED.blink(10);
mbotkinl 0:77d82c39b97c 345 } else {
mbotkinl 0:77d82c39b97c 346
mbotkinl 0:77d82c39b97c 347 //print header
mbotkinl 0:77d82c39b97c 348 fprintf(fp,"Timestamp, sensor1, sensor2 \r\n");
mbotkinl 0:77d82c39b97c 349 fclose(fp);
mbotkinl 0:77d82c39b97c 350 blueLED.blink(5);
mbotkinl 0:77d82c39b97c 351 }
mbotkinl 0:77d82c39b97c 352
mbotkinl 0:77d82c39b97c 353 //Debug Mode
mbotkinl 0:77d82c39b97c 354 for (int dd=0;dd<30;dd=dd+1) {
mbotkinl 0:77d82c39b97c 355
mbotkinl 0:77d82c39b97c 356 if (numSensors == 3) {
mbotkinl 0:77d82c39b97c 357
mbotkinl 0:77d82c39b97c 358 } else if (numSensors ==2) {
mbotkinl 0:77d82c39b97c 359 if (tempSensorflag==true) {
mbotkinl 0:77d82c39b97c 360 if (lightSensorflag==true) {
mbotkinl 0:77d82c39b97c 361 getLightReading(&lightData);
mbotkinl 0:77d82c39b97c 362 getTempHumid(&tempData,&humData);
mbotkinl 0:77d82c39b97c 363 sendData3(tempData,tempField,humData,humField,lightData,lightField);
mbotkinl 0:77d82c39b97c 364 sdWrite3(tempData,humData,lightData);
mbotkinl 0:77d82c39b97c 365 } else if (SomeotherSensorflag==true) {
mbotkinl 0:77d82c39b97c 366
mbotkinl 0:77d82c39b97c 367 }
mbotkinl 0:77d82c39b97c 368 } else if (lightSensorflag==true) {
mbotkinl 0:77d82c39b97c 369 if (SomeotherSensorflag==true) {
mbotkinl 0:77d82c39b97c 370 getLightReading(&lightData);
mbotkinl 0:77d82c39b97c 371
mbotkinl 0:77d82c39b97c 372
mbotkinl 0:77d82c39b97c 373 }
mbotkinl 0:77d82c39b97c 374 }
mbotkinl 0:77d82c39b97c 375 } else {
mbotkinl 0:77d82c39b97c 376 if (tempSensorflag==true) {
mbotkinl 0:77d82c39b97c 377 getTempHumid(&tempData,&humData);
mbotkinl 0:77d82c39b97c 378 sendData2(tempData,tempField,humData,humField);
mbotkinl 0:77d82c39b97c 379 sdWrite2(tempData,humData);
mbotkinl 0:77d82c39b97c 380 } else if (lightSensorflag==true) {
mbotkinl 0:77d82c39b97c 381 getLightReading(&lightData);
mbotkinl 0:77d82c39b97c 382 sendData1(lightData,lightField);
mbotkinl 0:77d82c39b97c 383 sdWrite1(lightData);
mbotkinl 0:77d82c39b97c 384 } else if (SomeotherSensorflag==true) {
mbotkinl 0:77d82c39b97c 385
mbotkinl 0:77d82c39b97c 386 }
mbotkinl 0:77d82c39b97c 387 }
mbotkinl 0:77d82c39b97c 388 wait(30);
mbotkinl 0:77d82c39b97c 389 }
mbotkinl 0:77d82c39b97c 390
mbotkinl 0:77d82c39b97c 391
mbotkinl 0:77d82c39b97c 392
mbotkinl 0:77d82c39b97c 393
mbotkinl 0:77d82c39b97c 394
mbotkinl 0:77d82c39b97c 395 //normal mode
mbotkinl 0:77d82c39b97c 396 while (1) {
mbotkinl 0:77d82c39b97c 397
mbotkinl 0:77d82c39b97c 398 if (numSensors == 3) {
mbotkinl 0:77d82c39b97c 399
mbotkinl 0:77d82c39b97c 400 } else if (numSensors ==2) {
mbotkinl 0:77d82c39b97c 401 if (tempSensorflag==true) {
mbotkinl 0:77d82c39b97c 402 if (lightSensorflag==true) {
mbotkinl 0:77d82c39b97c 403 getLightReading(&lightData);
mbotkinl 0:77d82c39b97c 404 getTempHumid(&tempData,&humData);
mbotkinl 0:77d82c39b97c 405 sendData3(tempData,tempField,humData,humField,lightData,lightField);
mbotkinl 0:77d82c39b97c 406 sdWrite3(tempData,humData,lightData);
mbotkinl 0:77d82c39b97c 407 } else if (SomeotherSensorflag==true) {
mbotkinl 0:77d82c39b97c 408
mbotkinl 0:77d82c39b97c 409 }
mbotkinl 0:77d82c39b97c 410 } else if (lightSensorflag==true) {
mbotkinl 0:77d82c39b97c 411 if (SomeotherSensorflag==true) {
mbotkinl 0:77d82c39b97c 412 getLightReading(&lightData);
mbotkinl 0:77d82c39b97c 413
mbotkinl 0:77d82c39b97c 414
mbotkinl 0:77d82c39b97c 415 }
mbotkinl 0:77d82c39b97c 416 }
mbotkinl 0:77d82c39b97c 417 } else {
mbotkinl 0:77d82c39b97c 418 if (tempSensorflag==true) {
mbotkinl 0:77d82c39b97c 419 getTempHumid(&tempData,&humData);
mbotkinl 0:77d82c39b97c 420 sendData2(tempData,tempField,humData,humField);
mbotkinl 0:77d82c39b97c 421 sdWrite2(tempData,humData);
mbotkinl 0:77d82c39b97c 422 } else if (lightSensorflag==true) {
mbotkinl 0:77d82c39b97c 423 getLightReading(&lightData);
mbotkinl 0:77d82c39b97c 424 sendData1(lightData,lightField);
mbotkinl 0:77d82c39b97c 425 sdWrite1(lightData);
mbotkinl 0:77d82c39b97c 426 } else if (SomeotherSensorflag==true) {
mbotkinl 0:77d82c39b97c 427
mbotkinl 0:77d82c39b97c 428 }
mbotkinl 0:77d82c39b97c 429 }
mbotkinl 0:77d82c39b97c 430 wdt_sleep.sleep(BROADCAST_TIME);
mbotkinl 0:77d82c39b97c 431
mbotkinl 0:77d82c39b97c 432 }
mbotkinl 0:77d82c39b97c 433 }