Cellular building monitoring / Mbed 2 deprecated finalv3

Dependencies:   ARCH_GPRS_V2_HW Blinker GPRSInterface HTTPClient_GPRS RTC_WorkingLibrary SDFileSystem USBDevice mbed

Fork of finalv2 by Cellular building monitoring

Files at this revision

API Documentation at this revision

Comitter:
seedteam20
Date:
Tue May 05 19:53:49 2015 +0000
Parent:
0:77d82c39b97c
Child:
2:89ca14fa896e
Commit message:
sdfasd

Changed in this revision

GPRSInterface.lib Show annotated file Show diff for this revision Revisions of this file
finalCodev2.cpp Show diff for this revision Revisions of this file
finalCodev3.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/GPRSInterface.lib	Tue May 05 19:07:02 2015 +0000
+++ b/GPRSInterface.lib	Tue May 05 19:53:49 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/users/mbotkinl/code/GPRSInterface/#180feb3ebe62
+http://developer.mbed.org/teams/Seeed/code/GPRSInterface/#180feb3ebe62
--- a/finalCodev2.cpp	Tue May 05 19:07:02 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,433 +0,0 @@
-//SEED Team 20 Final Code draft 1 4/16/15
-
-#include "mbed.h"
-#include "SDFileSystem.h"
-#include "ARCH_GPRS_V2_HW.h"
-#include "HTTPClient.h"
-#include "GPRSInterface.h"
-#include "Blinker.h"
-#include "DHT.h"
-#include "i2c_uart.h"
-#include "ARCH_GPRS_Sleep.h"
-#include "ds1307.h"
-#include "USBSerial.h"
-#include <string>
-
-#define PIN_TX                  P1_27
-#define PIN_RX                  P1_26
-
-#define SDA    P0_5
-#define SCL    P0_4 
-
- 
-#define BROADCAST_TIME            300    
-
-USBSerial pc;
-
-//LED Blink
-DigitalOut line11(P0_9);
-DigitalOut line13(P0_2);
-DigitalOut line14(P1_28);
-
-Blinker yellowLED(LED1), redLED(LED2), greenLED(LED3), blueLED(LED4);
-
-//USBSerial pc;
-SDFileSystem sd(P1_22, P1_21, P1_20, P1_23, "sd"); // the pinout on the /Arch GPRS v2 mbed board.
-char filename[60];
-
-//RTC
-DS1307 rtc(SDA,SCL);
-int sec, minute, hours, day, date, month, year;
-char timestamp[17];
-
-//variables for reading data from SD card
-char APIKey[17];
-char sensors[3][5];
-char sensorBuff[5];
-int tempField, humField, lightField;
-int field1, field2, field3;
-int numSensors;
-bool tempSensorflag=false, lightSensorflag=false, SomeotherSensorflag=false;
-
-//GPRS setup
-GPRSInterface gprs(PIN_TX,PIN_RX,115200,"internetd.gdsp",NULL,NULL);
-HTTPClient http;
-char* thingSpeakUrl = "http://api.thingspeak.com/update";
-char urlBuffer[256];
-char str[1024];
-//char errorR[1024];
-string errorR;
-
-//Sensors
-//DHT sensor(P1_14,SEN51035P);
-DHT sensor(P1_14,SEN11301P);
-AnalogIn lightSensor(P0_12);
-
-
-int tempData,humData, lightData;
-
-
-void connectGPRS(void) {
-    iot_hw.init(); // power on SIM900
-    
-    int count = 0;
-    while(false == gprs.connect() && count < 5) {
-        wait(2);
-        count += 1;
-    }
-}
-
-void getTempHumid(int* tempData,int* humData){
-    int err = 1;
-    int count = 0;
-    iot_hw.grovePwrOn();
-    wait(1); // wait 1 second for device stable status
-    while (err != 0 && count < 4) {
-        err = sensor.readData();
-        count += 1;
-        *tempData = sensor.ReadTemperature(FARENHEIT);
-        *humData = sensor.ReadHumidity();
-        
-        wait(1);
-        } 
-    iot_hw.grovePwrOff();    
-}  
-
-void getLightReading(int* lightData)
-{
-        *lightData = lightSensor*1000;
-}
-
-
-int ReadFile (void) {    
-    mkdir("/sd", 0777);           // All other times open file in append mode
-    FILE *fp = fopen("/sd/config.txt","r");
-    if (fp==NULL) {
-        fclose(fp);
-        return 0;
-        
-    } else if (fp) {        
-        //fscanf(fp,"%16c %d %s %s", APIKey, &numSensors, sensors[0],sensors[1]);
-        fscanf(fp,"%16c",APIKey);
-        
-//        pc.printf("APIKEY= %s\r\n",APIKey);
-//        
-        fscanf(fp,"%d",&numSensors);
-//        pc.printf("number of sensors = %d \r\n",numSensors);
-//        
-        for (int i = 0; i<numSensors;i=i+1) {
-            fscanf(fp,"%s",sensors[i]); 
-            //fscanf(fp,"%s",sensorBuff); 
-            strcpy(sensors[i],sensorBuff);
-            //pc.printf("sensor %d = %s\r\n",i,sensors[i]); 
-        }
-        
-
-        fclose(fp);
-        return 1;
-    
-    } else {
-        fclose(fp);
-        return 0;
-    }
-        
-}
-
-bool stringComparison (const char *string1, const char *string2) {
-  int count = 0;
-  while (string1[count] != 0) {
-    if (string1[count] != string2[count])
-      return false;
-    count++;
-  }
-  return true;
-}
-
-
-void sendData1(int sensor1Data, int field1) {
-    connectGPRS();
-    urlBuffer[0] = 0;
-    sprintf(urlBuffer, "%s?key=%s&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data);
-    HTTPResult res = http.get(urlBuffer, str,128);
-    if (res != HTTP_OK) {
-        redLED.blink(5);
-    } else {
-        greenLED.blink(5);
-    }
-    
-    
-    iot_hw.init_io(); //power down SIM900
-}
-
-void sendData2(int sensor1Data, int field1, int sensor2Data, int field2) {
-    connectGPRS();
-    urlBuffer[0] = 0;
-    sprintf(urlBuffer, "%s?key=%s&field%d=%d&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data, field2, sensor2Data);
-    HTTPResult res = http.get(urlBuffer, str,128);
-    if (res != HTTP_OK) {
-        redLED.blink(5);
-    } else {
-        greenLED.blink(5);
-    }
-    iot_hw.init_io(); //power down SIM900
-}
-
-void sendData3(int sensor1Data, int field1, int sensor2Data, int field2, int sensor3Data, int field3) {
-    connectGPRS();
-    urlBuffer[0] = 0;
-    sprintf(urlBuffer, "%s?key=%s&field%d=%d&field%d=%d&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data, field2, sensor2Data, field3, sensor3Data);
-    HTTPResult res = http.get(urlBuffer, str,128);
-    if (res != HTTP_OK) {
-        redLED.blink(5);
-    } else {
-        greenLED.blink(5);
-    }
-    iot_hw.init_io(); //power down SIM900
-}
-
-//void errorWrite(const char* errorReport) {
-void errorWrite(string errorReport) {
-    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
-    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
-    
-    mkdir("/sd", 0777);
-    FILE *fp = fopen("/sd/ErrorLog.txt","a");
-    if (fp == NULL) {
-        //no sd card
-        redLED.blink(10);
-    } else {
-        pc.printf("%s: %s \r\n",timestamp,errorReport);
-        fprintf(fp,"%s: %s \r\n",timestamp,errorReport);
-        fclose(fp);
-        blueLED.blink(5);
-    }
-}
-
-void sdWrite1(int sensor1Data)
-{
-    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
-    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
-    
-    mkdir("/sd", 0777);
-    FILE *fp = fopen("/sd/node1.csv","a");
-    if (fp == NULL) {
-        //no sd card
-        redLED.blink(10);
-    } else {
-
-        fprintf(fp,"%s, %d \r\n",timestamp,sensor1Data);
-        fclose(fp);
-        blueLED.blink(5);
-    }
-}
-
-void sdWrite2(int sensor1Data, int sensor2Data)
-{
-    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
-    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
-    
-    mkdir("/sd", 0777);
-    FILE *fp = fopen("/sd/node1.csv","a");
-    if (fp == NULL) {
-        //no sd card
-        redLED.blink(10);
-    } else {
-
-        fprintf(fp,"%s, %d, %d\r\n",timestamp, sensor1Data, sensor2Data);
-        fclose(fp);
-        blueLED.blink(5);
-    }
-}
-
-void sdWrite3(int sensor1Data, int sensor2Data,int sensor3Data)
-{
-    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
-    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
-    
-    mkdir("/sd", 0777);
-    FILE *fp = fopen("/sd/node1.csv","a");
-    if (fp == NULL) {
-        //no sd card
-        redLED.blink(10);
-    } else {
-
-        fprintf(fp,"%s, %d, %d, %d\r\n",timestamp, sensor1Data, sensor2Data, sensor3Data);
-        fclose(fp);
-        blueLED.blink(5);
-    }
-}
-
-
-
-
-int main() {
-    wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC); //set up sleep
-    
-
-    
-    //test of breadboard
-//    while (1) {
-//        //rtc test
-//        errorR="Test rtc";
-//        rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
-//        sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
-//        pc.printf("%s: %s\r\n",timestamp,errorR);
-//        
-//        //rgb test
-//        int n=5;
-//        int t=1;
-//        pc.printf("line11 blink\r\n");
-//        for (int i = 0; i < n; i++) {
-//            line11 = 1;
-//            wait(t);
-//            line11 = 0;
-//            wait(t);
-//        }
-//
-//        pc.printf("line13 blink\r\n");
-//
-//        for (int i = 0; i < n; i++) {
-//            line13 = 1;
-//            wait(t);
-//            line13 = 0;
-//            wait(t);
-//        }
-//        
-//        pc.printf("line11 blink\r\n");
-//
-//        for (int i = 0; i < n; i++) {
-//            line14 = 1;
-//            wait(t);
-//            line14 = 0;
-//            wait(t);
-//        }
-//        //light sensor test
-//        getLightReading(&lightData);
-//        pc.printf("light reading: %d \r\n",lightData);
-//        
-//        wait(15);
-//    }
-    
-        
-    //read SD card
-    while (ReadFile()==0) {
-        wait(5);
-        redLED.blink(10);
-    }
-    greenLED.blink(10);
-    
-
-    //identify sensors and find order of fields
-    int field=1;
-    for (int i=0;i<numSensors;i=i+1) {
-        if (stringComparison(sensors[i],"temp")==true) {
-            tempSensorflag=true;
-            tempField=field;
-            humField=field+1;
-            field=field+1;
-        } else if (stringComparison(sensors[i],"light")==true) {
-            lightSensorflag=true;
-            lightField=field;
-        } else if (stringComparison(sensors[i],"some other sensor")==true) {
-            SomeotherSensorflag=true;
-        }
-        field=field+1;
-    }
-    
-    //set up CSV file
-    mkdir("/sd", 0777);
-    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
-    sprintf(filename,"/sd/DataLog_20%.2d.%.2d.%.2d_%.2d.%.2d.csv",year, month, date, hours, minute);
-    FILE *fp = fopen(filename,"a");
-    if (fp == NULL) {
-        //no sd card
-        redLED.blink(10);
-    } else {
-        
-        //print header
-        fprintf(fp,"Timestamp, sensor1, sensor2 \r\n");
-        fclose(fp);
-        blueLED.blink(5);
-    }
-    
-    //Debug Mode
-    for (int dd=0;dd<30;dd=dd+1) {
-        
-        if (numSensors == 3) {
-                
-            } else if (numSensors ==2) {
-                if (tempSensorflag==true) {
-                    if (lightSensorflag==true) {
-                        getLightReading(&lightData);
-                        getTempHumid(&tempData,&humData);
-                        sendData3(tempData,tempField,humData,humField,lightData,lightField);
-                        sdWrite3(tempData,humData,lightData);
-                    } else if (SomeotherSensorflag==true) { 
-                    
-                    }  
-                } else if (lightSensorflag==true) {
-                    if (SomeotherSensorflag==true) {
-                        getLightReading(&lightData);
-                        
-                        
-                    }
-                }   
-            } else {
-                if (tempSensorflag==true) {
-                    getTempHumid(&tempData,&humData);
-                    sendData2(tempData,tempField,humData,humField);
-                    sdWrite2(tempData,humData);
-                } else if (lightSensorflag==true) {
-                    getLightReading(&lightData);
-                    sendData1(lightData,lightField);
-                    sdWrite1(lightData);
-                } else if (SomeotherSensorflag==true) {
-                    
-                }
-            }
-            wait(30);
-        }
-        
-    
-    
-    
-    
-    //normal mode
-    while (1) {
-        
-        if (numSensors == 3) {
-            
-        } else if (numSensors ==2) {
-            if (tempSensorflag==true) {
-                if (lightSensorflag==true) {
-                    getLightReading(&lightData);
-                    getTempHumid(&tempData,&humData);
-                    sendData3(tempData,tempField,humData,humField,lightData,lightField);
-                    sdWrite3(tempData,humData,lightData);
-                } else if (SomeotherSensorflag==true) { 
-                
-                }  
-            } else if (lightSensorflag==true) {
-                if (SomeotherSensorflag==true) {
-                    getLightReading(&lightData);
-                    
-                    
-                }
-            }   
-        } else {
-            if (tempSensorflag==true) {
-                getTempHumid(&tempData,&humData);
-                sendData2(tempData,tempField,humData,humField);
-                sdWrite2(tempData,humData);
-            } else if (lightSensorflag==true) {
-                getLightReading(&lightData);
-                sendData1(lightData,lightField);
-                sdWrite1(lightData);
-            } else if (SomeotherSensorflag==true) {
-                
-            }
-        }
-        wdt_sleep.sleep(BROADCAST_TIME);
-    
-    }
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finalCodev3.cpp	Tue May 05 19:53:49 2015 +0000
@@ -0,0 +1,444 @@
+//SEED Team 20 Final Code draft 1 4/16/15
+
+#include "mbed.h"
+#include "SDFileSystem.h"
+#include "ARCH_GPRS_V2_HW.h"
+#include "HTTPClient.h"
+#include "GPRSInterface.h"
+#include "Blinker.h"
+#include "DHT.h"
+#include "i2c_uart.h"
+#include "ARCH_GPRS_Sleep.h"
+#include "ds1307.h"
+#include "USBSerial.h"
+#include <string>
+
+//Arch GPRS v2 SIM900 pins
+#define PIN_TX                  P1_27
+#define PIN_RX                  P1_26
+
+//RTC
+#define SDA    P0_5
+#define SCL    P0_4 
+
+#define BROADCAST_TIME            300 //time between sending data [sec]  
+
+USBSerial pc;
+
+//LED Blink
+DigitalOut line11(P0_9);
+DigitalOut line13(P0_2);
+DigitalOut line14(P1_28);
+
+Blinker yellowLED(LED1), redLED(LED2), greenLED(LED3), blueLED(LED4);
+
+//USBSerial pc;
+SDFileSystem sd(P1_22, P1_21, P1_20, P1_23, "sd"); // the pinout on the /Arch GPRS v2 mbed board.
+char filename[60];
+
+//RTC
+DS1307 rtc(SDA,SCL);
+int sec, minute, hours, day, date, month, year;
+char timestamp[17];
+
+//variables for reading data from SD card
+char APIKey[17];
+char sensors[3][5];
+char sensorBuff[5];
+int tempField, humField, lightField;
+int field1, field2, field3;
+int numSensors;
+bool tempSensorflag=false, lightSensorflag=false, SomeotherSensorflag=false;
+
+//GPRS setup
+GPRSInterface gprs(PIN_TX,PIN_RX,115200,"internetd.gdsp",NULL,NULL);
+HTTPClient http;
+char* thingSpeakUrl = "http://api.thingspeak.com/update";
+char urlBuffer[256];
+char str[1024];
+//char errorR[1024];
+string errorR;
+
+//Sensors
+//DHT sensor(P1_14,SEN51035P);
+DHT sensor(P1_14,SEN11301P); //grove connected DHT22
+AnalogIn lightSensor(P0_12); //TEMT6000 sparkfun break out board ambient light sensor
+
+int tempData,humData, lightData; //variables to hold enviroment
+
+//method to connect GPRS to the network
+//@return true if successful, false if failed
+bool connectGPRS(void) {
+    iot_hw.init(); // power on SIM900
+    int count = 0;
+    while(false == gprs.connect() && count < 5) {
+        wait(2);
+        count += 1;
+    }
+    if (count != 5) return true; // success!
+    else return false; //failed
+}
+
+//method to collect temperature and humidity
+//using grove DHT22 sensors connected to P1_14, P1_13
+void getTempHumid(int* tempData,int* humData){
+    int err = 1;
+    int count = 0;
+    iot_hw.grovePwrOn(); // power on grove pins
+    wait(1); // wait 1 second for device stable status
+    while (err != 0 && count < 4) {
+        err = sensor.readData();
+        count += 1;
+        *tempData = sensor.ReadTemperature(FARENHEIT);
+        *humData = sensor.ReadHumidity();  
+        wait(1);
+        } 
+    iot_hw.grovePwrOff();  //power down grove pins  
+}  
+
+//method to collect light level data
+//using TEMT6000 sparkfun breakout board
+void getLightReading(int* lightData)
+{
+        *lightData = lightSensor*1000;
+}
+
+
+int ReadFile (void) {    
+    mkdir("/sd", 0777);           // All other times open file in append mode
+    FILE *fp = fopen("/sd/config.txt","r");
+    if (fp==NULL) {
+        fclose(fp);
+        return 0;
+        
+    } else if (fp) {        
+        //fscanf(fp,"%16c %d %s %s", APIKey, &numSensors, sensors[0],sensors[1]);
+        fscanf(fp,"%16c",APIKey);
+        
+//        pc.printf("APIKEY= %s\r\n",APIKey);
+//        
+        fscanf(fp,"%d",&numSensors);
+//        pc.printf("number of sensors = %d \r\n",numSensors);
+//        
+        for (int i = 0; i<numSensors;i=i+1) {
+            fscanf(fp,"%s",sensors[i]); 
+            //fscanf(fp,"%s",sensorBuff); 
+            strcpy(sensors[i],sensorBuff);
+            //pc.printf("sensor %d = %s\r\n",i,sensors[i]); 
+        }
+        
+
+        fclose(fp);
+        return 1;
+    
+    } else {
+        fclose(fp);
+        return 0;
+    }
+        
+}
+
+bool stringComparison (const char *string1, const char *string2) {
+  int count = 0;
+  while (string1[count] != 0) {
+    if (string1[count] != string2[count])
+      return false;
+    count++;
+  }
+  return true;
+}
+
+
+//method to send 1 field of data to ThingsSpeak
+//blinks green 5 times if successful
+//blinks red 5 times if get statement fails
+//blinks red 10 times if fails to connectGPRS
+void sendData1(int sensor1Data, int field1)
+{
+    if (connectGPRS() == true) { //connect is success
+        urlBuffer[0] = 0;
+        sprintf(urlBuffer, "%s?key=%s&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data); //create url 
+        HTTPResult res = http.get(urlBuffer, str,128); //send get request
+        if (res != HTTP_OK) redLED.blink(5);           //get statement failed blink red 5 times
+        else greenLED.blink(5);                        //get statement success blink green 5 times
+        iot_hw.init_io();                              //power down SIM900
+          
+    } else { //failed to connectGPRS
+        redLED.blink(10); //blink red 10 times
+        iot_hw.init_io(); //power down SIM900
+    }
+}
+
+//method to send 2 field of data to ThingsSpeak
+void sendData2(int sensor1Data, int field1, int sensor2Data, int field2)
+{
+    if (connectGPRS() == true) {
+        urlBuffer[0] = 0;
+        sprintf(urlBuffer, "%s?key=%s&field%d=%d&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data, field2, sensor2Data); //create url
+        HTTPResult res = http.get(urlBuffer, str,128); //send get request
+        if (res != HTTP_OK) redLED.blink(5); //get statement failed blink red 5 times
+        else greenLED.blink(5); //get statement success bink green 5 times
+        iot_hw.init_io(); //power down SIM900
+    } else {
+        redLED.blink(10); //blink red 10 times
+        iot_hw.init_io(); //power down SIM900
+    }
+}
+
+//method to send 3 field of data to ThingsSpeak
+void sendData3(int sensor1Data, int field1, int sensor2Data, int field2, int sensor3Data, int field3)
+{
+    if (connectGPRS() == true) {
+        urlBuffer[0] = 0;
+        sprintf(urlBuffer, "%s?key=%s&field%d=%d&field%d=%d&field%d=%d", thingSpeakUrl, APIKey, field1, sensor1Data, field2, sensor2Data, field3, sensor3Data); //create url to send
+        HTTPResult res = http.get(urlBuffer, str,128); //send get request
+        if (res != HTTP_OK) redLED.blink(5); //get statement failed blink red 5 times
+        else greenLED.blink(5); //get statemnet success blink green 5 times
+        iot_hw.init_io(); //power down SIM900
+    } else {
+        redLED.blink(10); //blink red 10 times
+        iot_hw.init_io(); //power down SIM900
+    }
+}
+
+//void errorWrite(const char* errorReport) {
+void errorWrite(string errorReport) {
+    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year); //get time from RTC
+    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec); // create timmestamp
+    
+    mkdir("/sd", 0777);
+    FILE *fp = fopen("/sd/ErrorLog.txt","a");
+    if (fp == NULL) {
+        blueLED.blink(10); //no sd card blink blue 10 times
+    } else {
+        //pc.printf("%s: %s \r\n",timestamp,errorReport);
+        fprintf(fp,"%s: %s \r\n",timestamp,errorReport); 
+        fclose(fp);
+        blueLED.blink(5);
+    }
+}
+
+//writes data to SDcard for 1 field
+//if no SDcard blink blue 10 times 
+void sdWrite1(int sensor1Data)
+{
+    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year); //get time from RTC
+    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec); //create time stamp
+    
+    mkdir("/sd", 0777);
+    FILE *fp = fopen("/sd/node1.csv","a");
+    if (fp == NULL) {
+        blueLED.blink(10); //no sd Card blink Blue 10 times 
+    } else {
+        fprintf(fp,"%s, %d \r\n",timestamp,sensor1Data); //write time stamp and data to microSD
+        fclose(fp);
+    }
+}
+
+//writes data to SDcard for 2 fields
+//if no SDcard blink blue 10 times 
+void sdWrite2(int sensor1Data, int sensor2Data)
+{
+    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year); //get time from RTC
+    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec); //create timestamp
+    
+    mkdir("/sd", 0777);
+    FILE *fp = fopen("/sd/node1.csv","a");
+    if (fp == NULL) {
+        blueLED.blink(10); //no sd Card blink blue 10 times
+    } else {
+        fprintf(fp,"%s, %d, %d\r\n",timestamp, sensor1Data, sensor2Data); //write timestamp+data to SD
+        fclose(fp);
+    }
+}
+
+//writes data to SDcard for 3 fields
+//if no SDcard blink blue 10 times 
+void sdWrite3(int sensor1Data, int sensor2Data,int sensor3Data)
+{
+    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year); //get time from RTC
+    sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec); //create timestamp
+    
+    mkdir("/sd", 0777);
+    FILE *fp = fopen("/sd/node1.csv","a");
+    if (fp == NULL) {
+        blueLED.blink(10); //no sd card blink blue 10 times
+    } else {
+        fprintf(fp,"%s, %d, %d, %d\r\n",timestamp, sensor1Data, sensor2Data, sensor3Data); //write timestamp+data to sd
+        fclose(fp);
+    }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+int main() {
+    wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC); //set up sleep
+    
+
+    
+    //test of breadboard
+//    while (1) {
+//        //rtc test
+//        errorR="Test rtc";
+//        rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
+//        sprintf(timestamp,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d", year, month, date, hours, minute, sec);
+//        pc.printf("%s: %s\r\n",timestamp,errorR);
+//        
+//        //rgb test
+//        int n=5;
+//        int t=1;
+//        pc.printf("line11 blink\r\n");
+//        for (int i = 0; i < n; i++) {
+//            line11 = 1;
+//            wait(t);
+//            line11 = 0;
+//            wait(t);
+//        }
+//
+//        pc.printf("line13 blink\r\n");
+//
+//        for (int i = 0; i < n; i++) {
+//            line13 = 1;
+//            wait(t);
+//            line13 = 0;
+//            wait(t);
+//        }
+//        
+//        pc.printf("line11 blink\r\n");
+//
+//        for (int i = 0; i < n; i++) {
+//            line14 = 1;
+//            wait(t);
+//            line14 = 0;
+//            wait(t);
+//        }
+//        //light sensor test
+//        getLightReading(&lightData);
+//        pc.printf("light reading: %d \r\n",lightData);
+//        
+//        wait(15);
+//    }
+    
+        
+    //read SD card
+    while (ReadFile()==0) {
+        wait(5);
+        redLED.blink(10);
+    }
+    greenLED.blink(10);
+    
+
+    //identify sensors and find order of fields
+    int field=1;
+    for (int i=0;i<numSensors;i=i+1) {
+        if (stringComparison(sensors[i],"temp")==true) {
+            tempSensorflag=true;
+            tempField=field;
+            humField=field+1;
+            field=field+1;
+        } else if (stringComparison(sensors[i],"light")==true) {
+            lightSensorflag=true;
+            lightField=field;
+        } else if (stringComparison(sensors[i],"some other sensor")==true) {
+            SomeotherSensorflag=true;
+        }
+        field=field+1;
+    }
+    
+    //set up CSV file
+    mkdir("/sd", 0777);
+    rtc.gettime( &sec, &minute, &hours, &day, &date, &month, &year);
+    sprintf(filename,"/sd/DataLog_20%.2d.%.2d.%.2d_%.2d.%.2d.csv",year, month, date, hours, minute);
+    FILE *fp = fopen(filename,"a");
+    if (fp == NULL) {
+        //no sd card
+        redLED.blink(10);
+    } else {
+        
+        //print header
+        fprintf(fp,"Timestamp, sensor1, sensor2 \r\n");
+        fclose(fp);
+        blueLED.blink(5);
+    }
+    
+    //Debug Mode
+    for (int dd=0;dd<30;dd=dd+1) {
+        
+        if (numSensors == 3) {
+                
+            } else if (numSensors ==2) {
+                if (tempSensorflag==true) {
+                    if (lightSensorflag==true) {
+                        getLightReading(&lightData);
+                        getTempHumid(&tempData,&humData);
+                        sendData3(tempData,tempField,humData,humField,lightData,lightField);
+                        sdWrite3(tempData,humData,lightData);
+                    } else if (SomeotherSensorflag==true) { 
+                    
+                    }  
+                } else if (lightSensorflag==true) {
+                    if (SomeotherSensorflag==true) {
+                        getLightReading(&lightData);
+                        
+                        
+                    }
+                }   
+            } else {
+                if (tempSensorflag==true) {
+                    getTempHumid(&tempData,&humData);
+                    sendData2(tempData,tempField,humData,humField);
+                    sdWrite2(tempData,humData);
+                } else if (lightSensorflag==true) {
+                    getLightReading(&lightData);
+                    sendData1(lightData,lightField);
+                    sdWrite1(lightData);
+                } else if (SomeotherSensorflag==true) {
+                    
+                }
+            }
+            wait(30);
+        }
+        
+    
+    
+    
+    
+    //normal mode
+    while (1) {
+        
+        if (numSensors == 3) {
+            
+        } else if (numSensors ==2) {
+            if (tempSensorflag==true) {
+                if (lightSensorflag==true) {
+                    getLightReading(&lightData);
+                    getTempHumid(&tempData,&humData);
+                    sendData3(tempData,tempField,humData,humField,lightData,lightField);
+                    sdWrite3(tempData,humData,lightData);
+                } else if (SomeotherSensorflag==true) { 
+                
+                }  
+            } else if (lightSensorflag==true) {
+                if (SomeotherSensorflag==true) {
+                    getLightReading(&lightData);
+                    
+                    
+                }
+            }   
+        } else {
+            if (tempSensorflag==true) {
+                getTempHumid(&tempData,&humData);
+                sendData2(tempData,tempField,humData,humField);
+                sdWrite2(tempData,humData);
+            } else if (lightSensorflag==true) {
+                getLightReading(&lightData);
+                sendData1(lightData,lightField);
+                sdWrite1(lightData);
+            } else if (SomeotherSensorflag==true) {
+                
+            }
+        }
+        wdt_sleep.sleep(BROADCAST_TIME);
+    
+    }
+}
\ No newline at end of file