needs more commenting, log file errors, LED feedback

Dependencies:   ARCH_GPRS_V2_HW Blinker GPRSInterface HTTPClient_GPRS RTC_WorkingLibrary SDFileSystem USBDevice mbed

Fork of finalv2 by Cellular building monitoring

Committer:
seedteam20
Date:
Tue May 05 19:53:49 2015 +0000
Revision:
1:0ec6c4c22623
Child:
2:89ca14fa896e
sdfasd

Who changed what in which revision?

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