Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Thu Apr 23 20:48:42 2015 +0000
Revision:
15:c6f7c4768cf2
Parent:
14:f3eb0fb6ecd5
Child:
16:5ce95c8f4e89
power settings donw. Logger setting is done. also the logger is finished with 2 graphs and 2 summary pages

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