Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Thu Apr 23 12:32:53 2015 +0000
Revision:
13:213bf5887930
Parent:
12:d4011389defe
Child:
14:f3eb0fb6ecd5
power saver done. working on the data logger settings and the data logger

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amiraseman 0:d78ac68077c6 1 #include "mbed.h"
amiraseman 0:d78ac68077c6 2 #include "N5110.h"
amiraseman 0:d78ac68077c6 3 #include "BMP180.h"
amiraseman 0:d78ac68077c6 4 #include "PowerControl/PowerControl.h"
amiraseman 0:d78ac68077c6 5 #include "PowerControl/EthernetPowerControl.h"
amiraseman 0:d78ac68077c6 6
amiraseman 0:d78ac68077c6 7 BMP180 bmp180(p28,p27); // SDA, SCL
amiraseman 0:d78ac68077c6 8 N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
amiraseman 1:e60b9f116d38 9 BusOut leds(LED4,LED3,LED2,LED1);
amiraseman 0:d78ac68077c6 10 Serial serial(USBTX,USBRX);
amiraseman 1:e60b9f116d38 11 InterruptIn button1(p16);
amiraseman 1:e60b9f116d38 12 InterruptIn button2(p17);
amiraseman 2:1d7ef0f49b35 13 InterruptIn button3 (p15);
amiraseman 2:1d7ef0f49b35 14 InterruptIn button4 (p18);
amiraseman 1:e60b9f116d38 15
amiraseman 0:d78ac68077c6 16
amiraseman 0:d78ac68077c6 17 Ticker timer; //Create ticker object for temperature and pressure readings
amiraseman 8:8b810c29eb7b 18 Ticker dataLoggerTimer ; // a ticker object for the data logger functions
amiraseman 6:03f12eda070d 19 Timeout powerSaverTimeout; // create a timeout object for the poweerSaver function
amiraseman 0:d78ac68077c6 20
amiraseman 0:d78ac68077c6 21 int setTimeFlag = 0; // flag for real time clock ISR
amiraseman 12:d4011389defe 22 int timerFlag = 1; // Flag for tempesrature pressure reading ISR
amiraseman 1:e60b9f116d38 23 int button1Flag = 0;
amiraseman 1:e60b9f116d38 24 int button2Flag = 0 ;
amiraseman 2:1d7ef0f49b35 25 int button3Flag = 0 ;
amiraseman 2:1d7ef0f49b35 26 int button4Flag = 0 ;
amiraseman 5:6952998ab446 27 int unitFlag = 1 ;
amiraseman 6:03f12eda070d 28 int powerSaverFlag = 0 ;
amiraseman 6:03f12eda070d 29 int lcdPowerFlag = 1 ; // Indicates if the LCD is switched on or powered off
amiraseman 7:328dc986484f 30 int dataLoggerFlag = 0 ;
amiraseman 8:8b810c29eb7b 31 int saveToFileFlag = 0 ;
amiraseman 2:1d7ef0f49b35 32
amiraseman 2:1d7ef0f49b35 33
amiraseman 8:8b810c29eb7b 34 int temperatureC ;
amiraseman 8:8b810c29eb7b 35 int temperatureF ;
amiraseman 8:8b810c29eb7b 36 float pressureMB ;
amiraseman 8:8b810c29eb7b 37 float pressureATM ;
amiraseman 1:e60b9f116d38 38 int choice=1 ;
amiraseman 12:d4011389defe 39 int length=14;
amiraseman 4:783276521952 40 int UNIXdate;
amiraseman 6:03f12eda070d 41 int powerSaverTime = 60;
amiraseman 8:8b810c29eb7b 42 int dataLoggerTime = 2;
amiraseman 8:8b810c29eb7b 43 int avgTC ; // an integer to store the average value of the temperature in celsious
amiraseman 8:8b810c29eb7b 44 int avgTF ;// int to save the average value of the temperature in farenheit
amiraseman 8:8b810c29eb7b 45 int avgPB ; // int to store the average value of pressure in mBar
amiraseman 8:8b810c29eb7b 46 int avgPA ; // int to save the average pressure in atm
amiraseman 8:8b810c29eb7b 47 int maxTC ;
amiraseman 8:8b810c29eb7b 48 int minTC ;
amiraseman 8:8b810c29eb7b 49 int maxTF ;
amiraseman 8:8b810c29eb7b 50 int minTF ;
amiraseman 8:8b810c29eb7b 51 int maxPB ;
amiraseman 8:8b810c29eb7b 52 int minPB ;
amiraseman 8:8b810c29eb7b 53 int maxPA ;
amiraseman 8:8b810c29eb7b 54 int minPA ;
amiraseman 8:8b810c29eb7b 55 float arrayTC[83]= {5} ; // An array to store the values of temperature in c
amiraseman 8:8b810c29eb7b 56 float arrayTF[83]= {5} ; // An array to store the values of temperature in farenh
amiraseman 8:8b810c29eb7b 57 float arrayPB[83]= {5} ; // An array to store the values of pressure in dB
amiraseman 8:8b810c29eb7b 58 float arrayPA[83]= {5} ; // An array to store the values of pressure in atm
amiraseman 6:03f12eda070d 59
amiraseman 6:03f12eda070d 60
amiraseman 0:d78ac68077c6 61
amiraseman 3:8a559b949470 62 char rxString[16]; //buffer to store recieved string from serial
amiraseman 0:d78ac68077c6 63 char bufferTime[14]; // buffer to store time
amiraseman 0:d78ac68077c6 64 char bufferDate[14]; //buffer to store date
amiraseman 4:783276521952 65 char bufferT[14]; //buffer to store temperature
amiraseman 4:783276521952 66 char bufferP[14]; //buffer to store pressure, each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
amiraseman 0:d78ac68077c6 67 // so can display a string of a maximum 14 characters in length
amiraseman 0:d78ac68077c6 68 // or create formatted strings - ensure they aren't more than 14 characters long
amiraseman 12:d4011389defe 69
amiraseman 12:d4011389defe 70
amiraseman 7:328dc986484f 71 char PowerSaverTime[2]; // string to store the powerSaverTime value to display on the LCD
amiraseman 7:328dc986484f 72 char DataLoggerTime[2]; // string to store the time used for the logger to read data
amiraseman 9:d1691d971f63 73 char buffer0[14];
amiraseman 9:d1691d971f63 74 char buffer1[14];
amiraseman 9:d1691d971f63 75 char buffer2[14];
amiraseman 9:d1691d971f63 76 char buffer3[14];
amiraseman 9:d1691d971f63 77 char buffer4[14];
amiraseman 9:d1691d971f63 78 char buffer5[14];
amiraseman 9:d1691d971f63 79
amiraseman 9:d1691d971f63 80
amiraseman 11:a78e01c9f054 81 int state=0; // used to navigate through the finite machines fsmA and fsmB
amiraseman 10:7c976b5a5e25 82 int stateplus1 ;
amiraseman 10:7c976b5a5e25 83 int stateplus2 ;
amiraseman 10:7c976b5a5e25 84 int stateminus1 ;
amiraseman 10:7c976b5a5e25 85 int stateminus2 ;
amiraseman 9:d1691d971f63 86
amiraseman 10:7c976b5a5e25 87
amiraseman 10:7c976b5a5e25 88
amiraseman 10:7c976b5a5e25 89 struct State {
amiraseman 9:d1691d971f63 90 int output;
amiraseman 12:d4011389defe 91 char title[14];
amiraseman 9:d1691d971f63 92 int nextState[2];
amiraseman 9:d1691d971f63 93 };
amiraseman 9:d1691d971f63 94
amiraseman 12:d4011389defe 95 typedef struct State STyp1; // for the start menu
amiraseman 9:d1691d971f63 96
amiraseman 9:d1691d971f63 97 STyp1 fsmA[5] = {
amiraseman 9:d1691d971f63 98 {0,"Live Data",{1,4}},
amiraseman 9:d1691d971f63 99 {1,"Saved Data",{2,0}},
amiraseman 9:d1691d971f63 100 {2,"Forecast",{3,1}},
amiraseman 9:d1691d971f63 101 {3,"Alarms",{4,2}},
amiraseman 9:d1691d971f63 102 {4,"Settings",{0,3}},
amiraseman 9:d1691d971f63 103 };
amiraseman 10:7c976b5a5e25 104
amiraseman 12:d4011389defe 105 typedef struct State STyp2; // for the settings menu
amiraseman 9:d1691d971f63 106
amiraseman 9:d1691d971f63 107 STyp2 fsmB[5] = {
amiraseman 9:d1691d971f63 108 {0,"Date/Time",{1,4}},
amiraseman 9:d1691d971f63 109 {1,"Units",{2,0}},
amiraseman 13:213bf5887930 110 {2,"Alerts",{3,1}},
amiraseman 9:d1691d971f63 111 {3,"Power",{4,2}},
amiraseman 9:d1691d971f63 112 {4,"Logger",{0,3}},
amiraseman 9:d1691d971f63 113 };
amiraseman 9:d1691d971f63 114
amiraseman 12:d4011389defe 115 typedef struct State STyp3; // for the time/date settings
amiraseman 11:a78e01c9f054 116
amiraseman 11:a78e01c9f054 117 STyp3 fsmC[5] = {
amiraseman 11:a78e01c9f054 118 {12,"Hour:",{1,4}},
amiraseman 11:a78e01c9f054 119 {0,"Min:",{2,0}},
amiraseman 12:d4011389defe 120 {21,"Day:",{3,1}},
amiraseman 12:d4011389defe 121 {4,"Month:",{4,2}},
amiraseman 12:d4011389defe 122 {2015,"Year:",{0,3}},
amiraseman 11:a78e01c9f054 123 };
amiraseman 11:a78e01c9f054 124
amiraseman 11:a78e01c9f054 125
amiraseman 12:d4011389defe 126 typedef struct State STyp4; // for the units settings
amiraseman 12:d4011389defe 127
amiraseman 12:d4011389defe 128 STyp3 fsmD[4] = {
amiraseman 12:d4011389defe 129 {1,"C/mb",{1,3}},
amiraseman 12:d4011389defe 130 {2,"C/atm",{2,0}},
amiraseman 12:d4011389defe 131 {3,"F/mb",{3,1}},
amiraseman 12:d4011389defe 132 {4,"F/atm",{0,2}},
amiraseman 12:d4011389defe 133 };
amiraseman 12:d4011389defe 134
amiraseman 11:a78e01c9f054 135
amiraseman 13:213bf5887930 136 typedef struct State STyp5; // for the Power saver settings
amiraseman 13:213bf5887930 137
amiraseman 13:213bf5887930 138 STyp5 fsmE[2] = {
amiraseman 13:213bf5887930 139 {0,"Off",{1,0}},
amiraseman 13:213bf5887930 140 {60,"On",{0,1}},
amiraseman 13:213bf5887930 141 };
amiraseman 13:213bf5887930 142
amiraseman 13:213bf5887930 143
amiraseman 13:213bf5887930 144 typedef struct State STyp6; // for the data logger settings
amiraseman 13:213bf5887930 145
amiraseman 13:213bf5887930 146 STyp5 fsmF[4] = {
amiraseman 13:213bf5887930 147 {0,"Off",{1,0}}, // for the logger
amiraseman 13:213bf5887930 148 {60,"On",{0,1}}, // for the logger {dataLoggerFlag and Timer , "title" , next state}
amiraseman 13:213bf5887930 149 {0,"Off",{1,0}}, // for the save to file option
amiraseman 13:213bf5887930 150 {1,"On",{0,1}}, // for the save to file option
amiraseman 13:213bf5887930 151 };
amiraseman 11:a78e01c9f054 152
amiraseman 11:a78e01c9f054 153
amiraseman 0:d78ac68077c6 154
amiraseman 3:8a559b949470 155
amiraseman 1:e60b9f116d38 156 void button1Pressed() //ISR to subtract 1 from the value of choice when the first button is pressed
amiraseman 1:e60b9f116d38 157 {
amiraseman 10:7c976b5a5e25 158 state=fsmA[state].nextState[1];
amiraseman 13:213bf5887930 159 button1Flag=1;
amiraseman 1:e60b9f116d38 160 }
amiraseman 1:e60b9f116d38 161
amiraseman 1:e60b9f116d38 162
amiraseman 1:e60b9f116d38 163
amiraseman 1:e60b9f116d38 164 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
amiraseman 1:e60b9f116d38 165 {
amiraseman 10:7c976b5a5e25 166 state=fsmA[state].nextState[0];
amiraseman 13:213bf5887930 167 button2Flag=1;
amiraseman 1:e60b9f116d38 168 }
amiraseman 0:d78ac68077c6 169
amiraseman 0:d78ac68077c6 170
amiraseman 2:1d7ef0f49b35 171
amiraseman 2:1d7ef0f49b35 172 void button3Pressed()
amiraseman 2:1d7ef0f49b35 173 {
amiraseman 2:1d7ef0f49b35 174 button3Flag=1;
amiraseman 2:1d7ef0f49b35 175 }
amiraseman 2:1d7ef0f49b35 176
amiraseman 2:1d7ef0f49b35 177
amiraseman 2:1d7ef0f49b35 178
amiraseman 2:1d7ef0f49b35 179 void button4Pressed()
amiraseman 2:1d7ef0f49b35 180 {
amiraseman 2:1d7ef0f49b35 181 button4Flag = 1 ;
amiraseman 2:1d7ef0f49b35 182 }
amiraseman 2:1d7ef0f49b35 183
amiraseman 2:1d7ef0f49b35 184
amiraseman 2:1d7ef0f49b35 185
amiraseman 2:1d7ef0f49b35 186
amiraseman 3:8a559b949470 187 void serialISR()
amiraseman 0:d78ac68077c6 188 {
amiraseman 4:783276521952 189 //reads rx string into buffer when a serial interrupt occurs
amiraseman 3:8a559b949470 190 serial.gets(rxString,16);
amiraseman 4:783276521952 191 //set flag
amiraseman 3:8a559b949470 192 setTimeFlag=1;
amiraseman 3:8a559b949470 193 }
amiraseman 4:783276521952 194
amiraseman 4:783276521952 195
amiraseman 8:8b810c29eb7b 196 void timerExpired() // ISR which sets the timer flag (flag used to display the buffers on LCD)
amiraseman 8:8b810c29eb7b 197 {
amiraseman 8:8b810c29eb7b 198 timerFlag=1;
amiraseman 8:8b810c29eb7b 199 }
amiraseman 8:8b810c29eb7b 200
amiraseman 8:8b810c29eb7b 201
amiraseman 8:8b810c29eb7b 202
amiraseman 8:8b810c29eb7b 203 void dataLoggerTimerExpired ()
amiraseman 8:8b810c29eb7b 204 {
amiraseman 8:8b810c29eb7b 205 leds = 0;
amiraseman 8:8b810c29eb7b 206 dataLoggerFlag = 1 ;
amiraseman 8:8b810c29eb7b 207
amiraseman 8:8b810c29eb7b 208 }
amiraseman 8:8b810c29eb7b 209
amiraseman 8:8b810c29eb7b 210
amiraseman 8:8b810c29eb7b 211
amiraseman 3:8a559b949470 212 void setTime() // sets the time every second
amiraseman 3:8a559b949470 213 {
amiraseman 4:783276521952 214 //print time for debugging
amiraseman 6:03f12eda070d 215 //serial.printf("set_time -%s ",rxString);
amiraseman 3:8a559b949470 216 //atoi() converts a string to an integer
amiraseman 4:783276521952 217 int time = atoi(rxString);
amiraseman 4:783276521952 218 //update the time
amiraseman 4:783276521952 219 set_time(time);
amiraseman 0:d78ac68077c6 220 }
amiraseman 0:d78ac68077c6 221
amiraseman 0:d78ac68077c6 222
amiraseman 0:d78ac68077c6 223
amiraseman 3:8a559b949470 224 void updateTime()
amiraseman 0:d78ac68077c6 225 {
amiraseman 4:783276521952 226 time_t seconds = time(NULL); // get current time
amiraseman 0:d78ac68077c6 227 // format time into a string (time and date)
amiraseman 4:783276521952 228 strftime(bufferTime, 14 , "%I:%M", localtime(&seconds));
amiraseman 4:783276521952 229 strftime(bufferDate, 14 , "%d/%m/%y", localtime(&seconds));
amiraseman 4:783276521952 230
amiraseman 3:8a559b949470 231 if (setTimeFlag) {
amiraseman 3:8a559b949470 232 setTimeFlag=0;
amiraseman 8:8b810c29eb7b 233 setTime();
amiraseman 0:d78ac68077c6 234 }
amiraseman 0:d78ac68077c6 235 }
amiraseman 0:d78ac68077c6 236
amiraseman 9:d1691d971f63 237 void display()
amiraseman 9:d1691d971f63 238 {
amiraseman 9:d1691d971f63 239 lcd.clear();
amiraseman 11:a78e01c9f054 240 lcd.printString(buffer0,0,0);
amiraseman 9:d1691d971f63 241 lcd.printString(buffer1,0,1);
amiraseman 12:d4011389defe 242 lcd.printString(buffer2,0,2);
amiraseman 12:d4011389defe 243 lcd.printString(buffer3,0,3);
amiraseman 12:d4011389defe 244 lcd.printString(buffer4,0,4);
amiraseman 9:d1691d971f63 245 lcd.printString(buffer5,0,5);
amiraseman 0:d78ac68077c6 246
amiraseman 9:d1691d971f63 247 }
amiraseman 0:d78ac68077c6 248
amiraseman 0:d78ac68077c6 249
amiraseman 0:d78ac68077c6 250
amiraseman 1:e60b9f116d38 251 void readData() //Imports the data and saves them to the bufferss
amiraseman 0:d78ac68077c6 252 {
amiraseman 0:d78ac68077c6 253
amiraseman 0:d78ac68077c6 254 Measurement measurement; // measurement structure declared in BMP180 class
amiraseman 0:d78ac68077c6 255
amiraseman 0:d78ac68077c6 256 // read values (T in Celsius and P in mb) and print over serial port
amiraseman 0:d78ac68077c6 257 measurement = bmp180.readValues();
amiraseman 0:d78ac68077c6 258 // serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
amiraseman 0:d78ac68077c6 259
amiraseman 8:8b810c29eb7b 260 temperatureC = measurement.temperature;
amiraseman 8:8b810c29eb7b 261 temperatureF = (temperatureC*(9/5))+32;
amiraseman 6:03f12eda070d 262
amiraseman 6:03f12eda070d 263 if (unitFlag==1 || unitFlag==2 ) {
amiraseman 6:03f12eda070d 264 length = sprintf(bufferT,"T = %0.1d C",temperatureC); // print formatted data to buffer
amiraseman 6:03f12eda070d 265 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 266 }
amiraseman 6:03f12eda070d 267 if (unitFlag==3 || unitFlag==4 ) {
amiraseman 6:03f12eda070d 268 length = sprintf(bufferT,"T = %0.1d F",temperatureF); // print formatted data to buffer
amiraseman 6:03f12eda070d 269 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 270 }
amiraseman 0:d78ac68077c6 271
amiraseman 8:8b810c29eb7b 272 pressureMB = measurement.pressure; // same idea with floats
amiraseman 8:8b810c29eb7b 273 pressureATM = pressureMB*0.0009869;
amiraseman 6:03f12eda070d 274
amiraseman 6:03f12eda070d 275
amiraseman 6:03f12eda070d 276 if (unitFlag==1 || unitFlag==3 ) {
amiraseman 6:03f12eda070d 277 length = sprintf(bufferP,"P = %.2f mb",pressureMB); // print formatted data to buffer
amiraseman 6:03f12eda070d 278 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 279 }
amiraseman 6:03f12eda070d 280 if (unitFlag==2 || unitFlag==4 ) {
amiraseman 6:03f12eda070d 281 length = sprintf(bufferP,"P = %.2f atm",pressureATM); // print formatted data to buffer
amiraseman 6:03f12eda070d 282 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 283 }
amiraseman 0:d78ac68077c6 284
amiraseman 8:8b810c29eb7b 285 }
amiraseman 0:d78ac68077c6 286
amiraseman 0:d78ac68077c6 287
amiraseman 0:d78ac68077c6 288
amiraseman 1:e60b9f116d38 289
amiraseman 1:e60b9f116d38 290
amiraseman 6:03f12eda070d 291
amiraseman 6:03f12eda070d 292
amiraseman 6:03f12eda070d 293 void savePower() // turns off the LCD to save power
amiraseman 6:03f12eda070d 294 {
amiraseman 13:213bf5887930 295 serial.printf("starts saving power\n");
amiraseman 6:03f12eda070d 296 lcd.turnOff () ; //turns off the lcd
amiraseman 13:213bf5887930 297 lcdPowerFlag = 0 ; // A flag is set to indicate the state of the LCD (is switched off)
amiraseman 13:213bf5887930 298 serial.printf("LCD is off\n");
amiraseman 13:213bf5887930 299
amiraseman 6:03f12eda070d 300
amiraseman 6:03f12eda070d 301 }
amiraseman 6:03f12eda070d 302
amiraseman 6:03f12eda070d 303
amiraseman 6:03f12eda070d 304
amiraseman 6:03f12eda070d 305
amiraseman 6:03f12eda070d 306
amiraseman 6:03f12eda070d 307
amiraseman 7:328dc986484f 308
amiraseman 7:328dc986484f 309 void powerSaverCheck() // checks if the powersaverFlag is set
amiraseman 7:328dc986484f 310 {
amiraseman 7:328dc986484f 311
amiraseman 13:213bf5887930 312 if (powerSaverFlag) {
amiraseman 7:328dc986484f 313
amiraseman 13:213bf5887930 314 serial.printf("Timeout attached\n");
amiraseman 7:328dc986484f 315 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 7:328dc986484f 316
amiraseman 7:328dc986484f 317 }
amiraseman 7:328dc986484f 318
amiraseman 7:328dc986484f 319 else {
amiraseman 13:213bf5887930 320 serial.printf("lcd is on\n");
amiraseman 7:328dc986484f 321 powerSaverTimeout.detach();
amiraseman 13:213bf5887930 322 serial.printf("Timeout detached\n");
amiraseman 7:328dc986484f 323
amiraseman 7:328dc986484f 324 }
amiraseman 7:328dc986484f 325 }
amiraseman 7:328dc986484f 326
amiraseman 7:328dc986484f 327
amiraseman 7:328dc986484f 328
amiraseman 6:03f12eda070d 329 void wakeUp () //Turns the LCD on after the mbed is interrupted
amiraseman 6:03f12eda070d 330 {
amiraseman 6:03f12eda070d 331
amiraseman 6:03f12eda070d 332
amiraseman 13:213bf5887930 333 if (lcdPowerFlag == 0) {// if the LCD is powered off
amiraseman 13:213bf5887930 334 serial.printf("lcd is off\n");
amiraseman 6:03f12eda070d 335
amiraseman 13:213bf5887930 336 if (button1Flag || button2Flag || button3Flag || button4Flag) { // if any of the buttons are pressed
amiraseman 13:213bf5887930 337
amiraseman 13:213bf5887930 338 serial.printf("one of the buttons are pressed to turn on the lcd\n");
amiraseman 13:213bf5887930 339 lcdPowerFlag = 1 ; // sets the status of the lcd to powered on
amiraseman 13:213bf5887930 340 serial.printf("lcd is on\n");
amiraseman 6:03f12eda070d 341 lcd.init(); // turns the LCD on
amiraseman 6:03f12eda070d 342 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 6:03f12eda070d 343 button1Flag = 0 ;
amiraseman 6:03f12eda070d 344 button2Flag = 0 ;
amiraseman 6:03f12eda070d 345 button3Flag = 0 ;
amiraseman 6:03f12eda070d 346 button4Flag = 0 ;
amiraseman 6:03f12eda070d 347 }
amiraseman 6:03f12eda070d 348 }
amiraseman 6:03f12eda070d 349
amiraseman 6:03f12eda070d 350 }
amiraseman 6:03f12eda070d 351
amiraseman 8:8b810c29eb7b 352 void setLoggerTimer()
amiraseman 8:8b810c29eb7b 353 {
amiraseman 8:8b810c29eb7b 354 switch (dataLoggerTime) {
amiraseman 8:8b810c29eb7b 355 case 1:
amiraseman 8:8b810c29eb7b 356 dataLoggerTimer.attach(&dataLoggerTimerExpired , 300);
amiraseman 8:8b810c29eb7b 357 break;
amiraseman 8:8b810c29eb7b 358 case 2:
amiraseman 8:8b810c29eb7b 359 dataLoggerTimer.attach(&dataLoggerTimerExpired , 600);
amiraseman 8:8b810c29eb7b 360 break;
amiraseman 8:8b810c29eb7b 361 case 3:
amiraseman 8:8b810c29eb7b 362 dataLoggerTimer.attach(&dataLoggerTimerExpired , 900);
amiraseman 8:8b810c29eb7b 363 break;
amiraseman 8:8b810c29eb7b 364 case 4:
amiraseman 8:8b810c29eb7b 365 dataLoggerTimer.attach(&dataLoggerTimerExpired , 1200);
amiraseman 8:8b810c29eb7b 366 break;
amiraseman 8:8b810c29eb7b 367 case 5:
amiraseman 8:8b810c29eb7b 368 dataLoggerTimer.attach(&dataLoggerTimerExpired , 1500);
amiraseman 8:8b810c29eb7b 369 break;
amiraseman 8:8b810c29eb7b 370 case 6:
amiraseman 8:8b810c29eb7b 371 dataLoggerTimer.attach(&dataLoggerTimerExpired , 1800);
amiraseman 8:8b810c29eb7b 372 break;
amiraseman 8:8b810c29eb7b 373 default:
amiraseman 8:8b810c29eb7b 374 break;
amiraseman 8:8b810c29eb7b 375 }
amiraseman 8:8b810c29eb7b 376 }
amiraseman 6:03f12eda070d 377
amiraseman 6:03f12eda070d 378
amiraseman 12:d4011389defe 379 void liveData() //
amiraseman 7:328dc986484f 380 {
amiraseman 13:213bf5887930 381 powerSaverCheck();
amiraseman 12:d4011389defe 382 while (1) {
amiraseman 12:d4011389defe 383 wakeUp();
amiraseman 12:d4011389defe 384 if (timerFlag) {
amiraseman 12:d4011389defe 385 timerFlag=0;
amiraseman 7:328dc986484f 386 readData();
amiraseman 12:d4011389defe 387 // lcd.printString("hey",1,1);
amiraseman 12:d4011389defe 388 strncpy(buffer1, bufferTime, 14);
amiraseman 12:d4011389defe 389 strncpy(buffer2, bufferDate, 14);
amiraseman 12:d4011389defe 390 strncpy(buffer3, bufferT, 14);
amiraseman 12:d4011389defe 391 strncpy(buffer4, bufferP, 14);
amiraseman 12:d4011389defe 392 int dispaly = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 12:d4011389defe 393 int dispaly1 = sprintf (buffer0, "");//convert integer to buffer str
amiraseman 12:d4011389defe 394 display();
amiraseman 12:d4011389defe 395 }
amiraseman 12:d4011389defe 396 if (button3Flag) {
amiraseman 12:d4011389defe 397 button3Flag = 0;
amiraseman 12:d4011389defe 398 timer.detach();
amiraseman 12:d4011389defe 399 break;
amiraseman 7:328dc986484f 400 }
amiraseman 7:328dc986484f 401 }
amiraseman 7:328dc986484f 402 }
amiraseman 7:328dc986484f 403
amiraseman 7:328dc986484f 404
amiraseman 8:8b810c29eb7b 405
amiraseman 8:8b810c29eb7b 406 void updateLoggerData() // If the data logger ISR is set then it reads the data and stores to suitable arrays (the arrays are used to plot the desired graphs)
amiraseman 8:8b810c29eb7b 407 {
amiraseman 8:8b810c29eb7b 408 if (dataLoggerFlag) {
amiraseman 8:8b810c29eb7b 409 dataLoggerFlag=0;
amiraseman 8:8b810c29eb7b 410 lcd.clear();
amiraseman 8:8b810c29eb7b 411
amiraseman 8:8b810c29eb7b 412 int i = 0 ;
amiraseman 8:8b810c29eb7b 413 int k ;
amiraseman 8:8b810c29eb7b 414 int sumTC = 0;
amiraseman 8:8b810c29eb7b 415 int sumTF = 0;
amiraseman 8:8b810c29eb7b 416 int sumPB = 0;
amiraseman 8:8b810c29eb7b 417 int sumPA = 0;
amiraseman 8:8b810c29eb7b 418 int maxTC = 0 ;
amiraseman 8:8b810c29eb7b 419 minTC = 0 ;
amiraseman 8:8b810c29eb7b 420 maxTF = 0 ;
amiraseman 8:8b810c29eb7b 421 minTF = 0 ;
amiraseman 8:8b810c29eb7b 422 maxPB = 0 ;
amiraseman 8:8b810c29eb7b 423 minPB = 0 ;
amiraseman 8:8b810c29eb7b 424 maxPA = 0 ;
amiraseman 8:8b810c29eb7b 425 minPA = 0 ;
amiraseman 8:8b810c29eb7b 426 i++;
amiraseman 8:8b810c29eb7b 427
amiraseman 8:8b810c29eb7b 428 //write the data to the arrays (arrays used to plot graphs)
amiraseman 8:8b810c29eb7b 429 //read the data from sensor
amiraseman 8:8b810c29eb7b 430 readData();
amiraseman 8:8b810c29eb7b 431 //Store the values in the array
amiraseman 8:8b810c29eb7b 432 arrayTC[i] = temperatureC;
amiraseman 8:8b810c29eb7b 433 arrayTF[i] = temperatureF;
amiraseman 8:8b810c29eb7b 434 arrayPB[i] = pressureMB;
amiraseman 8:8b810c29eb7b 435 arrayPA[i] = pressureATM;
amiraseman 8:8b810c29eb7b 436
amiraseman 8:8b810c29eb7b 437 // calculate the average value of the arrays and save them to an integer
amiraseman 8:8b810c29eb7b 438
amiraseman 8:8b810c29eb7b 439 for (k = 0 ; k<i ; k++) {
amiraseman 8:8b810c29eb7b 440 sumTC += arrayTC[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 441 avgTC = sumTC/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 442 sumTF += arrayTF[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 443 avgTF = sumTF/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 444 sumPB += arrayPB[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 445 avgPB = sumTC/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 446 sumPA += arrayPA[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 447 avgPA = sumPA/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 448
amiraseman 8:8b810c29eb7b 449 if(arrayTC[i]>maxTC) { // finds the biggest value of the array
amiraseman 8:8b810c29eb7b 450 maxTC=arrayTC[i];
amiraseman 8:8b810c29eb7b 451 }
amiraseman 8:8b810c29eb7b 452 if(arrayTC[i]<minTC) { // finds the smallest value of the array
amiraseman 8:8b810c29eb7b 453 minTC=arrayTC[i];
amiraseman 8:8b810c29eb7b 454 }
amiraseman 8:8b810c29eb7b 455 if(arrayTF[i]>maxTF) {
amiraseman 8:8b810c29eb7b 456 maxTF=arrayTF[i];
amiraseman 8:8b810c29eb7b 457 }
amiraseman 8:8b810c29eb7b 458 if(arrayTF[i]<minTF) {
amiraseman 8:8b810c29eb7b 459 minTF=arrayTF[i];
amiraseman 8:8b810c29eb7b 460 }
amiraseman 8:8b810c29eb7b 461 if(arrayPB[i]>maxPB) {
amiraseman 8:8b810c29eb7b 462 maxPB=arrayPB[i];
amiraseman 8:8b810c29eb7b 463 }
amiraseman 8:8b810c29eb7b 464 if(arrayPB[i]<minPB) {
amiraseman 8:8b810c29eb7b 465 minPB=arrayPB[i];
amiraseman 8:8b810c29eb7b 466 }
amiraseman 8:8b810c29eb7b 467 if(arrayPA[i]>maxPA) {
amiraseman 8:8b810c29eb7b 468 maxPA=arrayPA[i];
amiraseman 8:8b810c29eb7b 469 }
amiraseman 8:8b810c29eb7b 470 if(arrayPA[i]<minPA) {
amiraseman 8:8b810c29eb7b 471 minPA=arrayPA[i];
amiraseman 8:8b810c29eb7b 472 }
amiraseman 8:8b810c29eb7b 473
amiraseman 8:8b810c29eb7b 474
amiraseman 8:8b810c29eb7b 475
amiraseman 8:8b810c29eb7b 476 }
amiraseman 8:8b810c29eb7b 477
amiraseman 8:8b810c29eb7b 478 if (i>83) {
amiraseman 8:8b810c29eb7b 479 lcd.clear();
amiraseman 8:8b810c29eb7b 480 i=0;
amiraseman 8:8b810c29eb7b 481 }
amiraseman 8:8b810c29eb7b 482
amiraseman 8:8b810c29eb7b 483 }
amiraseman 8:8b810c29eb7b 484 }
amiraseman 8:8b810c29eb7b 485
amiraseman 8:8b810c29eb7b 486
amiraseman 8:8b810c29eb7b 487
amiraseman 8:8b810c29eb7b 488
amiraseman 8:8b810c29eb7b 489 void dataLogger() // shows a summery of data and the graphs
amiraseman 8:8b810c29eb7b 490 {
amiraseman 8:8b810c29eb7b 491 leds = 0;
amiraseman 8:8b810c29eb7b 492 choice = 1;
amiraseman 8:8b810c29eb7b 493 char Max[2] = {0};
amiraseman 8:8b810c29eb7b 494 char Min[2] = {0};
amiraseman 8:8b810c29eb7b 495 char Avg[2] = {0};
amiraseman 8:8b810c29eb7b 496 while (1) {
amiraseman 8:8b810c29eb7b 497 updateLoggerData();
amiraseman 8:8b810c29eb7b 498 int min = sprintf (Min, "Min = %d", minTC);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 499 int max = sprintf (Max, "Max = %d", maxTC);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 500 int avg = sprintf (Avg, "Avg = %d", avgTC);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 501 //int mn = sprintf (Min, "Min = %d", minPB);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 502 //int mx = sprintf (Max, "Max = %d", maxPB);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 503 //int ag = sprintf (Avg, "Avg = %d", avgPB);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 504
amiraseman 8:8b810c29eb7b 505 if (choice < 1) {
amiraseman 8:8b810c29eb7b 506 choice =4 ;
amiraseman 8:8b810c29eb7b 507 }
amiraseman 8:8b810c29eb7b 508 if (choice > 4 ) {
amiraseman 8:8b810c29eb7b 509 choice = 1;
amiraseman 8:8b810c29eb7b 510 }
amiraseman 8:8b810c29eb7b 511
amiraseman 8:8b810c29eb7b 512 switch (choice) {
amiraseman 8:8b810c29eb7b 513 case 1 : {
amiraseman 8:8b810c29eb7b 514 lcd.clear();
amiraseman 9:d1691d971f63 515 leds = 1 ;
amiraseman 8:8b810c29eb7b 516 lcd.printString(bufferTime,48,0);
amiraseman 8:8b810c29eb7b 517 lcd.printString("Temperature",36,1);
amiraseman 8:8b810c29eb7b 518 lcd.printString(Min,0,2);
amiraseman 8:8b810c29eb7b 519 lcd.printString(Avg,0,3);
amiraseman 8:8b810c29eb7b 520 lcd.printString(Max,0,4);
amiraseman 8:8b810c29eb7b 521 lcd.printString("Next",40,5);
amiraseman 8:8b810c29eb7b 522
amiraseman 8:8b810c29eb7b 523
amiraseman 8:8b810c29eb7b 524 break;
amiraseman 8:8b810c29eb7b 525 }
amiraseman 8:8b810c29eb7b 526 case 2 :
amiraseman 8:8b810c29eb7b 527 lcd.clear();
amiraseman 9:d1691d971f63 528 leds = 2 ;
amiraseman 8:8b810c29eb7b 529 break;
amiraseman 8:8b810c29eb7b 530 case 3 :
amiraseman 8:8b810c29eb7b 531 lcd.clear();
amiraseman 9:d1691d971f63 532 leds = 4 ;
amiraseman 8:8b810c29eb7b 533 lcd.printString(bufferTime,48,0);
amiraseman 8:8b810c29eb7b 534 lcd.printString("Temperature",36,1);
amiraseman 8:8b810c29eb7b 535 lcd.printString(Min,0,2);
amiraseman 8:8b810c29eb7b 536 lcd.printString(Avg,0,3);
amiraseman 8:8b810c29eb7b 537 lcd.printString(Max,0,4);
amiraseman 8:8b810c29eb7b 538 lcd.printString("Next",40,5);
amiraseman 8:8b810c29eb7b 539
amiraseman 8:8b810c29eb7b 540 break;
amiraseman 8:8b810c29eb7b 541 case 4 :
amiraseman 9:d1691d971f63 542 leds = 8 ;
amiraseman 8:8b810c29eb7b 543 lcd.clear();
amiraseman 8:8b810c29eb7b 544 break;
amiraseman 8:8b810c29eb7b 545 default :
amiraseman 8:8b810c29eb7b 546
amiraseman 8:8b810c29eb7b 547 break;
amiraseman 8:8b810c29eb7b 548 }
amiraseman 8:8b810c29eb7b 549 }
amiraseman 8:8b810c29eb7b 550 }
amiraseman 8:8b810c29eb7b 551
amiraseman 7:328dc986484f 552 void dataLoggerSetting()
amiraseman 7:328dc986484f 553 {
amiraseman 13:213bf5887930 554 powerSaverCheck();
amiraseman 13:213bf5887930 555 while (1) {
amiraseman 13:213bf5887930 556 wakeUp();
amiraseman 13:213bf5887930 557 updateTime();
amiraseman 7:328dc986484f 558
amiraseman 13:213bf5887930 559 int display0 = sprintf (buffer0, " Back Save");
amiraseman 13:213bf5887930 560 int display1 = sprintf (buffer1, "Data logger");
amiraseman 13:213bf5887930 561 int display2 = sprintf (buffer2,">>%s", fsmF[state].title);
amiraseman 13:213bf5887930 562 if (state > 0 ) { // if data logger is swicthed on
amiraseman 13:213bf5887930 563 int display3 = sprintf (buffer3, "%i mins", fsmF[1].output/60); // display the timer value
amiraseman 13:213bf5887930 564 int dispaly4 = sprintf (buffer4, "Save to file");
amiraseman 13:213bf5887930 565 }
amiraseman 13:213bf5887930 566 if (state > 1 ) {
amiraseman 13:213bf5887930 567 int dispaly5 = sprintf (buffer5, ">>%s" , fsmF[state].title);
amiraseman 13:213bf5887930 568
amiraseman 13:213bf5887930 569 }
amiraseman 13:213bf5887930 570 else { // if the data logger is off doesnt display anything
amiraseman 13:213bf5887930 571 int display3 = sprintf (buffer3, "");
amiraseman 13:213bf5887930 572 }
amiraseman 8:8b810c29eb7b 573
amiraseman 8:8b810c29eb7b 574
amiraseman 13:213bf5887930 575 display();
amiraseman 7:328dc986484f 576
amiraseman 13:213bf5887930 577
amiraseman 7:328dc986484f 578
amiraseman 7:328dc986484f 579 switch (choice) {
amiraseman 7:328dc986484f 580 case 1:
amiraseman 7:328dc986484f 581
amiraseman 7:328dc986484f 582 lcd.clear();
amiraseman 7:328dc986484f 583 lcd.printString(bufferTime,48,0);
amiraseman 7:328dc986484f 584 lcd.printString("Data Logger :",0,1);
amiraseman 7:328dc986484f 585 lcd.printString("ON",0,2);
amiraseman 8:8b810c29eb7b 586 lcd.printString("Save on RAM :",0,3);
amiraseman 7:328dc986484f 587 lcd.printString(DataLoggerTime,0,4);
amiraseman 7:328dc986484f 588 lcd.printString("Back Save",0,5);
amiraseman 7:328dc986484f 589
amiraseman 7:328dc986484f 590 if (button4Flag) {
amiraseman 7:328dc986484f 591 button4Flag=0;
amiraseman 8:8b810c29eb7b 592 saveToFileFlag ++;
amiraseman 7:328dc986484f 593 dataLoggerFlag = 1 ;
amiraseman 7:328dc986484f 594 }
amiraseman 7:328dc986484f 595
amiraseman 7:328dc986484f 596
amiraseman 7:328dc986484f 597 break;
amiraseman 7:328dc986484f 598 case 2:
amiraseman 7:328dc986484f 599 lcd.clear();
amiraseman 7:328dc986484f 600 lcd.printString(bufferTime,48,0);
amiraseman 7:328dc986484f 601 lcd.printString("Data Logger : ",0,1);
amiraseman 7:328dc986484f 602 lcd.printString("OFF",0,2);
amiraseman 7:328dc986484f 603 lcd.printString("Back Save",0,5);
amiraseman 7:328dc986484f 604 if (button4Flag) {
amiraseman 7:328dc986484f 605 button4Flag=0;
amiraseman 7:328dc986484f 606 dataLoggerFlag = 0 ;
amiraseman 8:8b810c29eb7b 607 dataLoggerTimer.detach();
amiraseman 7:328dc986484f 608
amiraseman 7:328dc986484f 609 }
amiraseman 7:328dc986484f 610
amiraseman 7:328dc986484f 611 default:
amiraseman 7:328dc986484f 612 break;
amiraseman 7:328dc986484f 613
amiraseman 7:328dc986484f 614 }
amiraseman 7:328dc986484f 615
amiraseman 7:328dc986484f 616 wait (0.1);
amiraseman 7:328dc986484f 617 if (button3Flag) {
amiraseman 7:328dc986484f 618 button3Flag=0;
amiraseman 7:328dc986484f 619 break;
amiraseman 7:328dc986484f 620 }
amiraseman 7:328dc986484f 621 }
amiraseman 7:328dc986484f 622
amiraseman 7:328dc986484f 623
amiraseman 7:328dc986484f 624
amiraseman 7:328dc986484f 625 }
amiraseman 6:03f12eda070d 626
amiraseman 6:03f12eda070d 627
amiraseman 6:03f12eda070d 628
amiraseman 6:03f12eda070d 629
amiraseman 6:03f12eda070d 630
amiraseman 6:03f12eda070d 631
amiraseman 6:03f12eda070d 632
amiraseman 6:03f12eda070d 633
amiraseman 6:03f12eda070d 634
amiraseman 6:03f12eda070d 635
amiraseman 6:03f12eda070d 636
amiraseman 6:03f12eda070d 637
amiraseman 6:03f12eda070d 638 void powerSaverSetting()
amiraseman 6:03f12eda070d 639 {
amiraseman 13:213bf5887930 640 state = powerSaverFlag ; //inits the state to the saved flag by the user in the past
amiraseman 13:213bf5887930 641 powerSaverCheck();
amiraseman 6:03f12eda070d 642 while (1) {
amiraseman 6:03f12eda070d 643 wakeUp();
amiraseman 13:213bf5887930 644 updateTime();
amiraseman 6:03f12eda070d 645
amiraseman 13:213bf5887930 646 int display0 = sprintf (buffer0, " Back Save");
amiraseman 13:213bf5887930 647 int display1 = sprintf (buffer1, "");
amiraseman 13:213bf5887930 648 int display2 = sprintf (buffer2, "Power Saver");
amiraseman 13:213bf5887930 649 int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
amiraseman 13:213bf5887930 650 if (state == 1) {
amiraseman 13:213bf5887930 651 int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
amiraseman 13:213bf5887930 652 } else { // if the power saver is off it dowsnt show the time
amiraseman 13:213bf5887930 653 int display4 = sprintf (buffer4, "");
amiraseman 6:03f12eda070d 654 }
amiraseman 13:213bf5887930 655 int dispaly5 = sprintf (buffer5, "");
amiraseman 13:213bf5887930 656
amiraseman 13:213bf5887930 657
amiraseman 13:213bf5887930 658 display();
amiraseman 13:213bf5887930 659
amiraseman 6:03f12eda070d 660
amiraseman 6:03f12eda070d 661
amiraseman 13:213bf5887930 662 powerSaverFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
amiraseman 13:213bf5887930 663 powerSaverTime = fsmE[state].output; //sets the timer to to value of output from the fsm
amiraseman 13:213bf5887930 664 serial.printf("Power Saver Time = %i \n powerSaverFlag = %i \n",powerSaverTime , powerSaverFlag);
amiraseman 6:03f12eda070d 665
amiraseman 13:213bf5887930 666 if (button4Flag) {
amiraseman 13:213bf5887930 667 button4Flag=0;
amiraseman 13:213bf5887930 668 fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
amiraseman 13:213bf5887930 669 }
amiraseman 13:213bf5887930 670 if (fsmE[state].output > 600) {
amiraseman 13:213bf5887930 671 fsmE[state].output = 60 ;
amiraseman 6:03f12eda070d 672 }
amiraseman 6:03f12eda070d 673
amiraseman 13:213bf5887930 674 if (state > 1) {
amiraseman 13:213bf5887930 675 state = 0 ;
amiraseman 13:213bf5887930 676 }
amiraseman 13:213bf5887930 677
amiraseman 6:03f12eda070d 678 if (button3Flag) {
amiraseman 6:03f12eda070d 679 button3Flag=0;
amiraseman 13:213bf5887930 680 powerSaverCheck();
amiraseman 6:03f12eda070d 681 break;
amiraseman 6:03f12eda070d 682 }
amiraseman 13:213bf5887930 683 wait (0.1);
amiraseman 6:03f12eda070d 684 }
amiraseman 6:03f12eda070d 685 }
amiraseman 6:03f12eda070d 686
amiraseman 6:03f12eda070d 687
amiraseman 6:03f12eda070d 688
amiraseman 6:03f12eda070d 689
amiraseman 6:03f12eda070d 690
amiraseman 6:03f12eda070d 691
amiraseman 6:03f12eda070d 692
amiraseman 6:03f12eda070d 693
amiraseman 4:783276521952 694 void calculateUNIXTime()
amiraseman 4:783276521952 695 {
amiraseman 4:783276521952 696 time_t rawtime;
amiraseman 4:783276521952 697 struct tm * timeinfo;
amiraseman 4:783276521952 698
amiraseman 4:783276521952 699 /* get current timeinfo: */
amiraseman 4:783276521952 700 time ( &rawtime ); //or: rawtime = time(0);
amiraseman 4:783276521952 701 /* convert to struct: */
amiraseman 4:783276521952 702 timeinfo = localtime ( &rawtime );
amiraseman 4:783276521952 703
amiraseman 4:783276521952 704 /* now modify the timeinfo to the given date: */
amiraseman 12:d4011389defe 705 timeinfo->tm_year = (fsmC[4].output) - 1900;
amiraseman 12:d4011389defe 706 timeinfo->tm_mon = (fsmC[3].output) - 1; //months since January - [0,11]
amiraseman 12:d4011389defe 707 timeinfo->tm_mday = (fsmC[2].output) ; //day of the month - [1,31]
amiraseman 12:d4011389defe 708 timeinfo->tm_hour = (fsmC[0].output) ; //hours since midnight - [0,23]
amiraseman 12:d4011389defe 709 timeinfo->tm_min = (fsmC[1].output) ; //minutes after the hour - [0,59]
amiraseman 12:d4011389defe 710 timeinfo->tm_sec = 0 ; //seconds after the minute - [0,59]
amiraseman 4:783276521952 711
amiraseman 4:783276521952 712 /* call mktime: create unix time stamp from timeinfo struct */
amiraseman 4:783276521952 713 UNIXdate = mktime ( timeinfo );
amiraseman 4:783276521952 714
amiraseman 4:783276521952 715 }
amiraseman 4:783276521952 716
amiraseman 5:6952998ab446 717
amiraseman 13:213bf5887930 718 void notificationSetting ()
amiraseman 4:783276521952 719 {
amiraseman 4:783276521952 720 while(1) {
amiraseman 6:03f12eda070d 721 wakeUp();
amiraseman 12:d4011389defe 722 powerSaverCheck();
amiraseman 5:6952998ab446 723
amiraseman 5:6952998ab446 724
amiraseman 5:6952998ab446 725 if (button4Flag) {
amiraseman 5:6952998ab446 726 button4Flag=0;
amiraseman 12:d4011389defe 727
amiraseman 5:6952998ab446 728 }
amiraseman 5:6952998ab446 729
amiraseman 4:783276521952 730 if (button3Flag) {
amiraseman 4:783276521952 731 button3Flag=0;
amiraseman 4:783276521952 732 break;
amiraseman 4:783276521952 733 }
amiraseman 4:783276521952 734 }
amiraseman 0:d78ac68077c6 735 }
amiraseman 0:d78ac68077c6 736
amiraseman 0:d78ac68077c6 737
amiraseman 2:1d7ef0f49b35 738
amiraseman 12:d4011389defe 739 void unitsSetting()
amiraseman 3:8a559b949470 740 {
amiraseman 12:d4011389defe 741 state = 0;
amiraseman 13:213bf5887930 742 powerSaverCheck();
amiraseman 11:a78e01c9f054 743 while (1) {
amiraseman 12:d4011389defe 744 wakeUp();
amiraseman 12:d4011389defe 745 updateTime();
amiraseman 12:d4011389defe 746 stateminus1=fsmD[state].nextState[0];
amiraseman 12:d4011389defe 747 stateminus2=fsmD[stateminus1].nextState[0];
amiraseman 12:d4011389defe 748 stateplus1=fsmD[state].nextState[1];
amiraseman 12:d4011389defe 749 stateplus2=fsmD[stateplus1].nextState[1];
amiraseman 12:d4011389defe 750
amiraseman 3:8a559b949470 751
amiraseman 4:783276521952 752
amiraseman 3:8a559b949470 753
amiraseman 12:d4011389defe 754 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 12:d4011389defe 755 int display1 = sprintf (buffer1, "%s", fsmD[stateminus2].title);//convert integer to buffer str
amiraseman 12:d4011389defe 756 int display2 = sprintf (buffer2, "%s", fsmD[stateminus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 757 int display3 = sprintf (buffer3, ">>%s", fsmD[state].title);//convert integer to buffer str
amiraseman 12:d4011389defe 758 int display4 = sprintf (buffer4, "%s", fsmD[stateplus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 759 int dispaly5 = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 12:d4011389defe 760
amiraseman 12:d4011389defe 761
amiraseman 12:d4011389defe 762 unitFlag = fsmD[state].output;
amiraseman 12:d4011389defe 763
amiraseman 12:d4011389defe 764 display();
amiraseman 12:d4011389defe 765
amiraseman 12:d4011389defe 766 if (button3Flag) {
amiraseman 12:d4011389defe 767 button3Flag=0;
amiraseman 12:d4011389defe 768 break;
amiraseman 12:d4011389defe 769 }
amiraseman 12:d4011389defe 770
amiraseman 12:d4011389defe 771 wait (0.1);
amiraseman 12:d4011389defe 772 }
amiraseman 12:d4011389defe 773 }
amiraseman 12:d4011389defe 774
amiraseman 12:d4011389defe 775
amiraseman 12:d4011389defe 776
amiraseman 12:d4011389defe 777
amiraseman 12:d4011389defe 778
amiraseman 12:d4011389defe 779
amiraseman 12:d4011389defe 780
amiraseman 12:d4011389defe 781 void timeDateSetting()
amiraseman 12:d4011389defe 782 {
amiraseman 13:213bf5887930 783 powerSaverCheck();
amiraseman 12:d4011389defe 784 state = 0;
amiraseman 12:d4011389defe 785 while (1) {
amiraseman 11:a78e01c9f054 786 wakeUp();
amiraseman 11:a78e01c9f054 787 updateTime();
amiraseman 12:d4011389defe 788 stateminus1=fsmC[state].nextState[0];
amiraseman 12:d4011389defe 789 stateminus2=fsmC[stateminus1].nextState[0];
amiraseman 12:d4011389defe 790 stateplus1=fsmC[state].nextState[1];
amiraseman 12:d4011389defe 791 stateplus2=fsmC[stateplus1].nextState[1];
amiraseman 12:d4011389defe 792
amiraseman 12:d4011389defe 793
amiraseman 12:d4011389defe 794
amiraseman 12:d4011389defe 795
amiraseman 12:d4011389defe 796 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 12:d4011389defe 797 int display1 = sprintf (buffer1, "%s %d", fsmC[stateminus2].title,fsmC[stateminus2].output);//convert integer to buffer str
amiraseman 12:d4011389defe 798 int display2 = sprintf (buffer2, "%s %d", fsmC[stateminus1].title,fsmC[stateminus1].output);//convert integer to buffer str
amiraseman 12:d4011389defe 799 int display3 = sprintf (buffer3, ">>%s %d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
amiraseman 12:d4011389defe 800 int display4 = sprintf (buffer4, "%s %d", fsmC[stateplus1].title,fsmC[stateplus1].output);//convert integer to buffer str
amiraseman 12:d4011389defe 801 int display5 = sprintf (buffer5, "%s %d", fsmC[stateplus2].title,fsmC[stateplus2].output);//convert integer to buffer str
amiraseman 12:d4011389defe 802
amiraseman 12:d4011389defe 803
amiraseman 11:a78e01c9f054 804
amiraseman 11:a78e01c9f054 805 display();
amiraseman 3:8a559b949470 806
amiraseman 4:783276521952 807
amiraseman 11:a78e01c9f054 808
amiraseman 12:d4011389defe 809 if (button4Flag) {
amiraseman 12:d4011389defe 810 button4Flag= 0;
amiraseman 13:213bf5887930 811 fsmC[state].output ++;
amiraseman 12:d4011389defe 812 calculateUNIXTime();
amiraseman 12:d4011389defe 813 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 12:d4011389defe 814 }
amiraseman 11:a78e01c9f054 815
amiraseman 11:a78e01c9f054 816
amiraseman 12:d4011389defe 817 //checks the limits of the values
amiraseman 12:d4011389defe 818 if (fsmC[0].output >23) { //hour
amiraseman 12:d4011389defe 819 fsmC[0].output = 0 ;
amiraseman 12:d4011389defe 820 }
amiraseman 12:d4011389defe 821 if (fsmC[1].output>59) { // minute
amiraseman 12:d4011389defe 822 fsmC[1].output = 0 ;
amiraseman 12:d4011389defe 823 }
amiraseman 12:d4011389defe 824 if (fsmC[3].output>11) { //month
amiraseman 12:d4011389defe 825 fsmC[3].output = 0 ;
amiraseman 12:d4011389defe 826 }
amiraseman 12:d4011389defe 827 if (fsmC[2].output>31) { //day
amiraseman 12:d4011389defe 828 fsmC[2].output = 1 ;
amiraseman 12:d4011389defe 829 }
amiraseman 12:d4011389defe 830 if (fsmC[4].output>2030) { //year
amiraseman 12:d4011389defe 831 fsmC[4].output = 2015 ;
amiraseman 12:d4011389defe 832 }
amiraseman 11:a78e01c9f054 833
amiraseman 11:a78e01c9f054 834
amiraseman 12:d4011389defe 835
amiraseman 11:a78e01c9f054 836 if (button3Flag) {
amiraseman 11:a78e01c9f054 837 button3Flag=0;
amiraseman 11:a78e01c9f054 838 break;
amiraseman 11:a78e01c9f054 839 }
amiraseman 5:6952998ab446 840 wait (0.1);
amiraseman 3:8a559b949470 841 }
amiraseman 3:8a559b949470 842 }
amiraseman 3:8a559b949470 843
amiraseman 3:8a559b949470 844
amiraseman 3:8a559b949470 845
amiraseman 2:1d7ef0f49b35 846
amiraseman 2:1d7ef0f49b35 847 void settingsMenu()
amiraseman 2:1d7ef0f49b35 848 {
amiraseman 12:d4011389defe 849 state = 0;
amiraseman 13:213bf5887930 850 powerSaverCheck();
amiraseman 11:a78e01c9f054 851 while(1) {
amiraseman 12:d4011389defe 852
amiraseman 11:a78e01c9f054 853 stateminus1=fsmB[state].nextState[0];
amiraseman 11:a78e01c9f054 854 stateminus2=fsmB[stateminus1].nextState[0];
amiraseman 11:a78e01c9f054 855 stateplus1=fsmB[state].nextState[1];
amiraseman 11:a78e01c9f054 856 stateplus2=fsmB[stateplus1].nextState[1];
amiraseman 6:03f12eda070d 857
amiraseman 6:03f12eda070d 858
amiraseman 6:03f12eda070d 859 wakeUp();
amiraseman 3:8a559b949470 860 updateTime();
amiraseman 11:a78e01c9f054 861 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 862 int dispaly = sprintf (buffer1, "%s", fsmB[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 863 int dispaly1 = sprintf (buffer2, "%s", fsmB[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 864 int dispaly2 = sprintf (buffer3, ">>%s", fsmB[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 865 int dispaly3 = sprintf (buffer4, "%s", fsmB[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 866 int dispaly4 = sprintf (buffer5, "%s", fsmB[stateplus2].title);//convert integer to buffer str
amiraseman 9:d1691d971f63 867
amiraseman 9:d1691d971f63 868 display();
amiraseman 9:d1691d971f63 869
amiraseman 9:d1691d971f63 870
amiraseman 10:7c976b5a5e25 871 switch (state) {
amiraseman 11:a78e01c9f054 872 case 0:
amiraseman 4:783276521952 873 if (button4Flag) {
amiraseman 4:783276521952 874 button4Flag=0;
amiraseman 4:783276521952 875 timeDateSetting();
amiraseman 4:783276521952 876 }
amiraseman 4:783276521952 877
amiraseman 4:783276521952 878
amiraseman 2:1d7ef0f49b35 879 break;
amiraseman 11:a78e01c9f054 880 case 1:
amiraseman 9:d1691d971f63 881
amiraseman 5:6952998ab446 882
amiraseman 5:6952998ab446 883 if (button4Flag) {
amiraseman 5:6952998ab446 884 button4Flag=0;
amiraseman 5:6952998ab446 885 unitsSetting();
amiraseman 5:6952998ab446 886 }
amiraseman 5:6952998ab446 887
amiraseman 2:1d7ef0f49b35 888 break;
amiraseman 11:a78e01c9f054 889 case 2:
amiraseman 9:d1691d971f63 890
amiraseman 4:783276521952 891 if (button4Flag) {
amiraseman 4:783276521952 892 button4Flag = 0;
amiraseman 13:213bf5887930 893 notificationSetting();
amiraseman 4:783276521952 894 }
amiraseman 2:1d7ef0f49b35 895 break;
amiraseman 11:a78e01c9f054 896 case 3:
amiraseman 6:03f12eda070d 897 if (button4Flag) {
amiraseman 6:03f12eda070d 898 button4Flag = 0;
amiraseman 6:03f12eda070d 899 powerSaverSetting();
amiraseman 6:03f12eda070d 900 }
amiraseman 2:1d7ef0f49b35 901 break;
amiraseman 11:a78e01c9f054 902 case 4:
amiraseman 7:328dc986484f 903 if (button4Flag) {
amiraseman 7:328dc986484f 904 button4Flag = 0;
amiraseman 7:328dc986484f 905 dataLoggerSetting();
amiraseman 7:328dc986484f 906 }
amiraseman 2:1d7ef0f49b35 907 break;
amiraseman 2:1d7ef0f49b35 908 default:
amiraseman 2:1d7ef0f49b35 909 break;
amiraseman 2:1d7ef0f49b35 910 }
amiraseman 4:783276521952 911 if (button3Flag) {
amiraseman 2:1d7ef0f49b35 912 button3Flag=0;
amiraseman 2:1d7ef0f49b35 913 break;
amiraseman 4:783276521952 914 }
amiraseman 5:6952998ab446 915 wait (0.1);
amiraseman 2:1d7ef0f49b35 916 }
amiraseman 2:1d7ef0f49b35 917 }
amiraseman 2:1d7ef0f49b35 918
amiraseman 2:1d7ef0f49b35 919
amiraseman 5:6952998ab446 920 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 921 {
amiraseman 13:213bf5887930 922 wakeUp();
amiraseman 9:d1691d971f63 923
amiraseman 12:d4011389defe 924 stateminus1=fsmA[state].nextState[1];
amiraseman 12:d4011389defe 925 stateminus2=fsmA[stateminus1].nextState[1];
amiraseman 12:d4011389defe 926 stateplus1=fsmA[state].nextState[0];
amiraseman 12:d4011389defe 927 stateplus2=fsmA[stateplus1].nextState[0];
amiraseman 9:d1691d971f63 928
amiraseman 8:8b810c29eb7b 929
amiraseman 11:a78e01c9f054 930 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 931 int dispaly = sprintf (buffer1, "%s", fsmA[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 932 int dispaly1 = sprintf (buffer2, "%s", fsmA[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 933 int dispaly2 = sprintf (buffer3, ">>%s", fsmA[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 934 int dispaly3 = sprintf (buffer4, "%s", fsmA[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 935 int dispaly4 = sprintf (buffer5, "%s", fsmA[stateplus2].title);//convert integer to buffer str
amiraseman 1:e60b9f116d38 936
amiraseman 9:d1691d971f63 937
amiraseman 9:d1691d971f63 938
amiraseman 10:7c976b5a5e25 939 switch (state) {
amiraseman 9:d1691d971f63 940 case 0:
amiraseman 4:783276521952 941 if (button4Flag) {
amiraseman 4:783276521952 942 button4Flag=0;
amiraseman 12:d4011389defe 943 timerFlag=1;
amiraseman 8:8b810c29eb7b 944 timer.attach(&timerExpired,1.0);
amiraseman 12:d4011389defe 945 liveData();
amiraseman 4:783276521952 946 }
amiraseman 1:e60b9f116d38 947 break;
amiraseman 9:d1691d971f63 948 case 1:
amiraseman 8:8b810c29eb7b 949 if (button4Flag) {
amiraseman 8:8b810c29eb7b 950 button4Flag=0;
amiraseman 8:8b810c29eb7b 951 dataLogger();
amiraseman 8:8b810c29eb7b 952 }
amiraseman 1:e60b9f116d38 953 break;
amiraseman 9:d1691d971f63 954 case 2:
amiraseman 9:d1691d971f63 955 break;
amiraseman 1:e60b9f116d38 956 case 3:
amiraseman 1:e60b9f116d38 957 break;
amiraseman 1:e60b9f116d38 958 case 4:
amiraseman 2:1d7ef0f49b35 959 if (button4Flag) {
amiraseman 2:1d7ef0f49b35 960 button4Flag=0;
amiraseman 2:1d7ef0f49b35 961 settingsMenu();
amiraseman 2:1d7ef0f49b35 962 }
amiraseman 1:e60b9f116d38 963 break;
amiraseman 1:e60b9f116d38 964 default:
amiraseman 1:e60b9f116d38 965 break;
amiraseman 1:e60b9f116d38 966 }
amiraseman 1:e60b9f116d38 967 }
amiraseman 1:e60b9f116d38 968
amiraseman 1:e60b9f116d38 969
amiraseman 1:e60b9f116d38 970
amiraseman 2:1d7ef0f49b35 971
amiraseman 0:d78ac68077c6 972 int main()
amiraseman 0:d78ac68077c6 973 {
amiraseman 0:d78ac68077c6 974
amiraseman 0:d78ac68077c6 975 // initiliase barometer
amiraseman 0:d78ac68077c6 976 bmp180.init();
amiraseman 0:d78ac68077c6 977 lcd.init();
amiraseman 3:8a559b949470 978 serial.attach(&serialISR);
amiraseman 1:e60b9f116d38 979 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 980 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 2:1d7ef0f49b35 981 button3.rise(&button3Pressed);
amiraseman 2:1d7ef0f49b35 982 button4.rise(&button4Pressed);
amiraseman 8:8b810c29eb7b 983 dataLoggerTimer.attach(&dataLoggerTimerExpired , dataLoggerTime);
amiraseman 4:783276521952 984 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 13:213bf5887930 985 powerSaverCheck();
amiraseman 6:03f12eda070d 986
amiraseman 0:d78ac68077c6 987 while(1) {
amiraseman 3:8a559b949470 988 updateTime();
amiraseman 1:e60b9f116d38 989 startMenu();
amiraseman 9:d1691d971f63 990 display();
amiraseman 4:783276521952 991 wait (0.1);
amiraseman 0:d78ac68077c6 992 }
amiraseman 0:d78ac68077c6 993 }
amiraseman 0:d78ac68077c6 994
amiraseman 0:d78ac68077c6 995
amiraseman 0:d78ac68077c6 996