Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Mon Apr 27 11:46:25 2015 +0000
Revision:
16:5ce95c8f4e89
Parent:
15:c6f7c4768cf2
Child:
17:99161153081d
first commit of the day before making any changes; ;

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 16:5ce95c8f4e89 434 wakeUp();
amiraseman 16:5ce95c8f4e89 435 updateTime();
amiraseman 15:c6f7c4768cf2 436 if (runLoggerFlag) {
amiraseman 15:c6f7c4768cf2 437
amiraseman 15:c6f7c4768cf2 438
amiraseman 15:c6f7c4768cf2 439 loggerData();
amiraseman 15:c6f7c4768cf2 440
amiraseman 15:c6f7c4768cf2 441 if (button4Flag) {
amiraseman 15:c6f7c4768cf2 442 button4Flag = 0 ;
amiraseman 15:c6f7c4768cf2 443 swipe ++;
amiraseman 15:c6f7c4768cf2 444 }
amiraseman 15:c6f7c4768cf2 445 if (swipe > 4) {
amiraseman 15:c6f7c4768cf2 446 swipe = 1;
amiraseman 15:c6f7c4768cf2 447 }
amiraseman 15:c6f7c4768cf2 448
amiraseman 15:c6f7c4768cf2 449 strncpy(buffer0, bufferTime, 14);
amiraseman 15:c6f7c4768cf2 450 int display5 = sprintf (buffer5, " Back Next");//convert integer to buffer str
amiraseman 8:8b810c29eb7b 451
amiraseman 15:c6f7c4768cf2 452 switch (swipe) {
amiraseman 15:c6f7c4768cf2 453 case 1: {
amiraseman 15:c6f7c4768cf2 454 int display1 = sprintf (buffer1, "Temperature");
amiraseman 15:c6f7c4768cf2 455 int display2 = sprintf (buffer2, "Min = %d", minTemperature);
amiraseman 15:c6f7c4768cf2 456 int display3 = sprintf (buffer3, "Max = %d", maxTemperature);
amiraseman 15:c6f7c4768cf2 457 int display4 = sprintf (buffer4, "Avg = %d", averageTemperature);
amiraseman 15:c6f7c4768cf2 458 display();
amiraseman 15:c6f7c4768cf2 459 break;
amiraseman 15:c6f7c4768cf2 460 }
amiraseman 15:c6f7c4768cf2 461 case 2 : {
amiraseman 15:c6f7c4768cf2 462 lcd.clear();
amiraseman 15:c6f7c4768cf2 463 lcd.printString(" Temperature",0,0);
amiraseman 15:c6f7c4768cf2 464 lcd.plotArray(arrayT);
amiraseman 15:c6f7c4768cf2 465 break;
amiraseman 15:c6f7c4768cf2 466 }
amiraseman 15:c6f7c4768cf2 467 case 3 : {
amiraseman 15:c6f7c4768cf2 468 int display11 = sprintf (buffer1, "Pressure");
amiraseman 15:c6f7c4768cf2 469 int display22 = sprintf (buffer2, "Min = %d", minPressure);
amiraseman 15:c6f7c4768cf2 470 int display33 = sprintf (buffer3, "Max = %d", maxPressure);
amiraseman 15:c6f7c4768cf2 471 int display44 = sprintf (buffer4, "Avg = %d", averagePressure);
amiraseman 15:c6f7c4768cf2 472 display();
amiraseman 15:c6f7c4768cf2 473 break;
amiraseman 15:c6f7c4768cf2 474 }
amiraseman 15:c6f7c4768cf2 475 case 4 : {
amiraseman 15:c6f7c4768cf2 476 lcd.clear();
amiraseman 15:c6f7c4768cf2 477 lcd.printString(" Pressure",0,0);
amiraseman 15:c6f7c4768cf2 478 lcd.plotArray(arrayP);
amiraseman 15:c6f7c4768cf2 479 break;
amiraseman 15:c6f7c4768cf2 480 }
amiraseman 15:c6f7c4768cf2 481 default :
amiraseman 15:c6f7c4768cf2 482 break;
amiraseman 15:c6f7c4768cf2 483 }
amiraseman 15:c6f7c4768cf2 484 } else {
amiraseman 15:c6f7c4768cf2 485 lcd.clear();
amiraseman 15:c6f7c4768cf2 486 lcd.printString(" To Turn On",0,1);
amiraseman 15:c6f7c4768cf2 487 lcd.printString(" Go To",0,2);
amiraseman 15:c6f7c4768cf2 488 lcd.printString(" Settings",0,3);
amiraseman 15:c6f7c4768cf2 489 lcd.printString ("Back",0,5);
amiraseman 15:c6f7c4768cf2 490
amiraseman 8:8b810c29eb7b 491 }
amiraseman 8:8b810c29eb7b 492
amiraseman 15:c6f7c4768cf2 493 if (button3Flag) {
amiraseman 15:c6f7c4768cf2 494 button3Flag=0;
amiraseman 15:c6f7c4768cf2 495 break;
amiraseman 8:8b810c29eb7b 496 }
amiraseman 15:c6f7c4768cf2 497 wait(0.1);
amiraseman 8:8b810c29eb7b 498 }
amiraseman 8:8b810c29eb7b 499 }
amiraseman 8:8b810c29eb7b 500
amiraseman 15:c6f7c4768cf2 501
amiraseman 7:328dc986484f 502 void dataLoggerSetting()
amiraseman 7:328dc986484f 503 {
amiraseman 15:c6f7c4768cf2 504 state = runLoggerFlag ; //inits the state to the saved flag by the user in the past
amiraseman 13:213bf5887930 505 powerSaverCheck();
amiraseman 13:213bf5887930 506 while (1) {
amiraseman 13:213bf5887930 507 wakeUp();
amiraseman 13:213bf5887930 508 updateTime();
amiraseman 15:c6f7c4768cf2 509 loggerData();
amiraseman 13:213bf5887930 510 int display0 = sprintf (buffer0, " Back Save");
amiraseman 14:f3eb0fb6ecd5 511 int display1 = sprintf (buffer1, "");
amiraseman 14:f3eb0fb6ecd5 512 int display2 = sprintf (buffer2, "Data Logger");
amiraseman 14:f3eb0fb6ecd5 513 int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
amiraseman 14:f3eb0fb6ecd5 514 if (state == 1) {
amiraseman 14:f3eb0fb6ecd5 515 int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
amiraseman 14:f3eb0fb6ecd5 516 } else { // if the power saver is off it dowsnt show the time
amiraseman 14:f3eb0fb6ecd5 517 int display4 = sprintf (buffer4, "");
amiraseman 13:213bf5887930 518 }
amiraseman 14:f3eb0fb6ecd5 519 int dispaly5 = sprintf (buffer5, "");
amiraseman 8:8b810c29eb7b 520
amiraseman 8:8b810c29eb7b 521
amiraseman 13:213bf5887930 522 display();
amiraseman 7:328dc986484f 523
amiraseman 13:213bf5887930 524
amiraseman 7:328dc986484f 525
amiraseman 15:c6f7c4768cf2 526 runLoggerFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
amiraseman 14:f3eb0fb6ecd5 527 dataLoggerTime = fsmE[state].output; //sets the timer to to value of output from the fsm
amiraseman 14:f3eb0fb6ecd5 528 serial.printf("data logger Time = %i \n dataLoggerFlag = %i \n",dataLoggerTime , dataLoggerFlag);
amiraseman 7:328dc986484f 529
amiraseman 14:f3eb0fb6ecd5 530 if (button4Flag) {
amiraseman 14:f3eb0fb6ecd5 531 button4Flag=0;
amiraseman 14:f3eb0fb6ecd5 532 fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
amiraseman 14:f3eb0fb6ecd5 533 }
amiraseman 14:f3eb0fb6ecd5 534 if (fsmE[state].output > 1800) {
amiraseman 14:f3eb0fb6ecd5 535 fsmE[state].output = 60 ;
amiraseman 7:328dc986484f 536 }
amiraseman 7:328dc986484f 537
amiraseman 14:f3eb0fb6ecd5 538 if (state > 1) {
amiraseman 14:f3eb0fb6ecd5 539 state = 0 ;
amiraseman 14:f3eb0fb6ecd5 540 }
amiraseman 14:f3eb0fb6ecd5 541
amiraseman 7:328dc986484f 542 if (button3Flag) {
amiraseman 15:c6f7c4768cf2 543 if (state == 1) { // if the data logger is swiched on
amiraseman 15:c6f7c4768cf2 544 dataLoggerTimer.attach(&dataLoggerTimerExpired, dataLoggerTime); // set the timer
amiraseman 15:c6f7c4768cf2 545 }
amiraseman 15:c6f7c4768cf2 546 if (state == 0) { // if the data logger is swiched off
amiraseman 15:c6f7c4768cf2 547 dataLoggerTimer.detach(); // detach the timer
amiraseman 15:c6f7c4768cf2 548 }
amiraseman 15:c6f7c4768cf2 549 dataLoggerFlag = 1;
amiraseman 7:328dc986484f 550 button3Flag=0;
amiraseman 7:328dc986484f 551 break;
amiraseman 7:328dc986484f 552 }
amiraseman 14:f3eb0fb6ecd5 553 wait (0.1);
amiraseman 7:328dc986484f 554 }
amiraseman 7:328dc986484f 555
amiraseman 7:328dc986484f 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
amiraseman 6:03f12eda070d 568
amiraseman 6:03f12eda070d 569 void powerSaverSetting()
amiraseman 6:03f12eda070d 570 {
amiraseman 13:213bf5887930 571 state = powerSaverFlag ; //inits the state to the saved flag by the user in the past
amiraseman 13:213bf5887930 572 powerSaverCheck();
amiraseman 6:03f12eda070d 573 while (1) {
amiraseman 6:03f12eda070d 574 wakeUp();
amiraseman 13:213bf5887930 575 updateTime();
amiraseman 15:c6f7c4768cf2 576 loggerData();
amiraseman 13:213bf5887930 577 int display0 = sprintf (buffer0, " Back Save");
amiraseman 13:213bf5887930 578 int display1 = sprintf (buffer1, "");
amiraseman 13:213bf5887930 579 int display2 = sprintf (buffer2, "Power Saver");
amiraseman 13:213bf5887930 580 int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
amiraseman 13:213bf5887930 581 if (state == 1) {
amiraseman 13:213bf5887930 582 int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
amiraseman 13:213bf5887930 583 } else { // if the power saver is off it dowsnt show the time
amiraseman 13:213bf5887930 584 int display4 = sprintf (buffer4, "");
amiraseman 6:03f12eda070d 585 }
amiraseman 13:213bf5887930 586 int dispaly5 = sprintf (buffer5, "");
amiraseman 13:213bf5887930 587
amiraseman 13:213bf5887930 588
amiraseman 13:213bf5887930 589 display();
amiraseman 13:213bf5887930 590
amiraseman 6:03f12eda070d 591
amiraseman 6:03f12eda070d 592
amiraseman 13:213bf5887930 593 powerSaverFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
amiraseman 13:213bf5887930 594 powerSaverTime = fsmE[state].output; //sets the timer to to value of output from the fsm
amiraseman 13:213bf5887930 595 serial.printf("Power Saver Time = %i \n powerSaverFlag = %i \n",powerSaverTime , powerSaverFlag);
amiraseman 6:03f12eda070d 596
amiraseman 13:213bf5887930 597 if (button4Flag) {
amiraseman 13:213bf5887930 598 button4Flag=0;
amiraseman 13:213bf5887930 599 fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
amiraseman 13:213bf5887930 600 }
amiraseman 13:213bf5887930 601 if (fsmE[state].output > 600) {
amiraseman 13:213bf5887930 602 fsmE[state].output = 60 ;
amiraseman 6:03f12eda070d 603 }
amiraseman 6:03f12eda070d 604
amiraseman 13:213bf5887930 605 if (state > 1) {
amiraseman 13:213bf5887930 606 state = 0 ;
amiraseman 13:213bf5887930 607 }
amiraseman 13:213bf5887930 608
amiraseman 6:03f12eda070d 609 if (button3Flag) {
amiraseman 6:03f12eda070d 610 button3Flag=0;
amiraseman 13:213bf5887930 611 powerSaverCheck();
amiraseman 6:03f12eda070d 612 break;
amiraseman 6:03f12eda070d 613 }
amiraseman 13:213bf5887930 614 wait (0.1);
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 6:03f12eda070d 623
amiraseman 6:03f12eda070d 624
amiraseman 4:783276521952 625 void calculateUNIXTime()
amiraseman 4:783276521952 626 {
amiraseman 4:783276521952 627 time_t rawtime;
amiraseman 4:783276521952 628 struct tm * timeinfo;
amiraseman 4:783276521952 629
amiraseman 4:783276521952 630 /* get current timeinfo: */
amiraseman 4:783276521952 631 time ( &rawtime ); //or: rawtime = time(0);
amiraseman 4:783276521952 632 /* convert to struct: */
amiraseman 4:783276521952 633 timeinfo = localtime ( &rawtime );
amiraseman 4:783276521952 634
amiraseman 4:783276521952 635 /* now modify the timeinfo to the given date: */
amiraseman 12:d4011389defe 636 timeinfo->tm_year = (fsmC[4].output) - 1900;
amiraseman 12:d4011389defe 637 timeinfo->tm_mon = (fsmC[3].output) - 1; //months since January - [0,11]
amiraseman 12:d4011389defe 638 timeinfo->tm_mday = (fsmC[2].output) ; //day of the month - [1,31]
amiraseman 12:d4011389defe 639 timeinfo->tm_hour = (fsmC[0].output) ; //hours since midnight - [0,23]
amiraseman 12:d4011389defe 640 timeinfo->tm_min = (fsmC[1].output) ; //minutes after the hour - [0,59]
amiraseman 12:d4011389defe 641 timeinfo->tm_sec = 0 ; //seconds after the minute - [0,59]
amiraseman 4:783276521952 642
amiraseman 4:783276521952 643 /* call mktime: create unix time stamp from timeinfo struct */
amiraseman 4:783276521952 644 UNIXdate = mktime ( timeinfo );
amiraseman 4:783276521952 645
amiraseman 4:783276521952 646 }
amiraseman 4:783276521952 647
amiraseman 5:6952998ab446 648
amiraseman 13:213bf5887930 649 void notificationSetting ()
amiraseman 4:783276521952 650 {
amiraseman 4:783276521952 651 while(1) {
amiraseman 6:03f12eda070d 652 wakeUp();
amiraseman 12:d4011389defe 653 powerSaverCheck();
amiraseman 15:c6f7c4768cf2 654 loggerData();
amiraseman 5:6952998ab446 655
amiraseman 5:6952998ab446 656
amiraseman 5:6952998ab446 657 if (button4Flag) {
amiraseman 5:6952998ab446 658 button4Flag=0;
amiraseman 12:d4011389defe 659
amiraseman 5:6952998ab446 660 }
amiraseman 5:6952998ab446 661
amiraseman 4:783276521952 662 if (button3Flag) {
amiraseman 4:783276521952 663 button3Flag=0;
amiraseman 4:783276521952 664 break;
amiraseman 4:783276521952 665 }
amiraseman 4:783276521952 666 }
amiraseman 0:d78ac68077c6 667 }
amiraseman 0:d78ac68077c6 668
amiraseman 0:d78ac68077c6 669
amiraseman 2:1d7ef0f49b35 670
amiraseman 12:d4011389defe 671 void unitsSetting()
amiraseman 3:8a559b949470 672 {
amiraseman 12:d4011389defe 673 state = 0;
amiraseman 13:213bf5887930 674 powerSaverCheck();
amiraseman 11:a78e01c9f054 675 while (1) {
amiraseman 12:d4011389defe 676 wakeUp();
amiraseman 12:d4011389defe 677 updateTime();
amiraseman 15:c6f7c4768cf2 678 loggerData();
amiraseman 12:d4011389defe 679 stateminus1=fsmD[state].nextState[0];
amiraseman 12:d4011389defe 680 stateminus2=fsmD[stateminus1].nextState[0];
amiraseman 12:d4011389defe 681 stateplus1=fsmD[state].nextState[1];
amiraseman 12:d4011389defe 682 stateplus2=fsmD[stateplus1].nextState[1];
amiraseman 12:d4011389defe 683
amiraseman 3:8a559b949470 684
amiraseman 4:783276521952 685
amiraseman 3:8a559b949470 686
amiraseman 12:d4011389defe 687 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 12:d4011389defe 688 int display1 = sprintf (buffer1, "%s", fsmD[stateminus2].title);//convert integer to buffer str
amiraseman 12:d4011389defe 689 int display2 = sprintf (buffer2, "%s", fsmD[stateminus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 690 int display3 = sprintf (buffer3, ">>%s", fsmD[state].title);//convert integer to buffer str
amiraseman 12:d4011389defe 691 int display4 = sprintf (buffer4, "%s", fsmD[stateplus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 692 int dispaly5 = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 12:d4011389defe 693
amiraseman 12:d4011389defe 694
amiraseman 12:d4011389defe 695 unitFlag = fsmD[state].output;
amiraseman 12:d4011389defe 696
amiraseman 12:d4011389defe 697 display();
amiraseman 12:d4011389defe 698
amiraseman 12:d4011389defe 699 if (button3Flag) {
amiraseman 12:d4011389defe 700 button3Flag=0;
amiraseman 12:d4011389defe 701 break;
amiraseman 12:d4011389defe 702 }
amiraseman 12:d4011389defe 703
amiraseman 12:d4011389defe 704 wait (0.1);
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
amiraseman 12:d4011389defe 713
amiraseman 12:d4011389defe 714 void timeDateSetting()
amiraseman 12:d4011389defe 715 {
amiraseman 13:213bf5887930 716 powerSaverCheck();
amiraseman 12:d4011389defe 717 state = 0;
amiraseman 12:d4011389defe 718 while (1) {
amiraseman 11:a78e01c9f054 719 wakeUp();
amiraseman 11:a78e01c9f054 720 updateTime();
amiraseman 15:c6f7c4768cf2 721 loggerData();
amiraseman 12:d4011389defe 722 stateminus1=fsmC[state].nextState[0];
amiraseman 12:d4011389defe 723 stateminus2=fsmC[stateminus1].nextState[0];
amiraseman 12:d4011389defe 724 stateplus1=fsmC[state].nextState[1];
amiraseman 12:d4011389defe 725 stateplus2=fsmC[stateplus1].nextState[1];
amiraseman 12:d4011389defe 726
amiraseman 12:d4011389defe 727
amiraseman 12:d4011389defe 728
amiraseman 12:d4011389defe 729
amiraseman 12:d4011389defe 730 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 12:d4011389defe 731 int display1 = sprintf (buffer1, "%s %d", fsmC[stateminus2].title,fsmC[stateminus2].output);//convert integer to buffer str
amiraseman 12:d4011389defe 732 int display2 = sprintf (buffer2, "%s %d", fsmC[stateminus1].title,fsmC[stateminus1].output);//convert integer to buffer str
amiraseman 12:d4011389defe 733 int display3 = sprintf (buffer3, ">>%s %d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
amiraseman 12:d4011389defe 734 int display4 = sprintf (buffer4, "%s %d", fsmC[stateplus1].title,fsmC[stateplus1].output);//convert integer to buffer str
amiraseman 12:d4011389defe 735 int display5 = sprintf (buffer5, "%s %d", fsmC[stateplus2].title,fsmC[stateplus2].output);//convert integer to buffer str
amiraseman 12:d4011389defe 736
amiraseman 12:d4011389defe 737
amiraseman 11:a78e01c9f054 738
amiraseman 11:a78e01c9f054 739 display();
amiraseman 3:8a559b949470 740
amiraseman 4:783276521952 741
amiraseman 11:a78e01c9f054 742
amiraseman 12:d4011389defe 743 if (button4Flag) {
amiraseman 12:d4011389defe 744 button4Flag= 0;
amiraseman 13:213bf5887930 745 fsmC[state].output ++;
amiraseman 12:d4011389defe 746 calculateUNIXTime();
amiraseman 12:d4011389defe 747 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 12:d4011389defe 748 }
amiraseman 11:a78e01c9f054 749
amiraseman 11:a78e01c9f054 750
amiraseman 12:d4011389defe 751 //checks the limits of the values
amiraseman 12:d4011389defe 752 if (fsmC[0].output >23) { //hour
amiraseman 12:d4011389defe 753 fsmC[0].output = 0 ;
amiraseman 12:d4011389defe 754 }
amiraseman 12:d4011389defe 755 if (fsmC[1].output>59) { // minute
amiraseman 12:d4011389defe 756 fsmC[1].output = 0 ;
amiraseman 12:d4011389defe 757 }
amiraseman 12:d4011389defe 758 if (fsmC[3].output>11) { //month
amiraseman 12:d4011389defe 759 fsmC[3].output = 0 ;
amiraseman 12:d4011389defe 760 }
amiraseman 12:d4011389defe 761 if (fsmC[2].output>31) { //day
amiraseman 12:d4011389defe 762 fsmC[2].output = 1 ;
amiraseman 12:d4011389defe 763 }
amiraseman 12:d4011389defe 764 if (fsmC[4].output>2030) { //year
amiraseman 12:d4011389defe 765 fsmC[4].output = 2015 ;
amiraseman 12:d4011389defe 766 }
amiraseman 11:a78e01c9f054 767
amiraseman 11:a78e01c9f054 768
amiraseman 12:d4011389defe 769
amiraseman 11:a78e01c9f054 770 if (button3Flag) {
amiraseman 11:a78e01c9f054 771 button3Flag=0;
amiraseman 11:a78e01c9f054 772 break;
amiraseman 11:a78e01c9f054 773 }
amiraseman 5:6952998ab446 774 wait (0.1);
amiraseman 3:8a559b949470 775 }
amiraseman 3:8a559b949470 776 }
amiraseman 3:8a559b949470 777
amiraseman 3:8a559b949470 778
amiraseman 3:8a559b949470 779
amiraseman 2:1d7ef0f49b35 780
amiraseman 2:1d7ef0f49b35 781 void settingsMenu()
amiraseman 2:1d7ef0f49b35 782 {
amiraseman 12:d4011389defe 783 state = 0;
amiraseman 13:213bf5887930 784 powerSaverCheck();
amiraseman 11:a78e01c9f054 785 while(1) {
amiraseman 12:d4011389defe 786
amiraseman 11:a78e01c9f054 787 stateminus1=fsmB[state].nextState[0];
amiraseman 11:a78e01c9f054 788 stateminus2=fsmB[stateminus1].nextState[0];
amiraseman 11:a78e01c9f054 789 stateplus1=fsmB[state].nextState[1];
amiraseman 11:a78e01c9f054 790 stateplus2=fsmB[stateplus1].nextState[1];
amiraseman 6:03f12eda070d 791
amiraseman 6:03f12eda070d 792
amiraseman 6:03f12eda070d 793 wakeUp();
amiraseman 3:8a559b949470 794 updateTime();
amiraseman 15:c6f7c4768cf2 795 loggerData();
amiraseman 11:a78e01c9f054 796 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 797 int dispaly = sprintf (buffer1, "%s", fsmB[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 798 int dispaly1 = sprintf (buffer2, "%s", fsmB[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 799 int dispaly2 = sprintf (buffer3, ">>%s", fsmB[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 800 int dispaly3 = sprintf (buffer4, "%s", fsmB[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 801 int dispaly4 = sprintf (buffer5, "%s", fsmB[stateplus2].title);//convert integer to buffer str
amiraseman 9:d1691d971f63 802
amiraseman 9:d1691d971f63 803 display();
amiraseman 9:d1691d971f63 804
amiraseman 9:d1691d971f63 805
amiraseman 10:7c976b5a5e25 806 switch (state) {
amiraseman 11:a78e01c9f054 807 case 0:
amiraseman 4:783276521952 808 if (button4Flag) {
amiraseman 4:783276521952 809 button4Flag=0;
amiraseman 4:783276521952 810 timeDateSetting();
amiraseman 4:783276521952 811 }
amiraseman 4:783276521952 812
amiraseman 4:783276521952 813
amiraseman 2:1d7ef0f49b35 814 break;
amiraseman 11:a78e01c9f054 815 case 1:
amiraseman 9:d1691d971f63 816
amiraseman 5:6952998ab446 817
amiraseman 5:6952998ab446 818 if (button4Flag) {
amiraseman 5:6952998ab446 819 button4Flag=0;
amiraseman 5:6952998ab446 820 unitsSetting();
amiraseman 5:6952998ab446 821 }
amiraseman 5:6952998ab446 822
amiraseman 2:1d7ef0f49b35 823 break;
amiraseman 11:a78e01c9f054 824 case 2:
amiraseman 9:d1691d971f63 825
amiraseman 4:783276521952 826 if (button4Flag) {
amiraseman 4:783276521952 827 button4Flag = 0;
amiraseman 13:213bf5887930 828 notificationSetting();
amiraseman 4:783276521952 829 }
amiraseman 2:1d7ef0f49b35 830 break;
amiraseman 11:a78e01c9f054 831 case 3:
amiraseman 6:03f12eda070d 832 if (button4Flag) {
amiraseman 6:03f12eda070d 833 button4Flag = 0;
amiraseman 6:03f12eda070d 834 powerSaverSetting();
amiraseman 6:03f12eda070d 835 }
amiraseman 2:1d7ef0f49b35 836 break;
amiraseman 11:a78e01c9f054 837 case 4:
amiraseman 7:328dc986484f 838 if (button4Flag) {
amiraseman 7:328dc986484f 839 button4Flag = 0;
amiraseman 7:328dc986484f 840 dataLoggerSetting();
amiraseman 7:328dc986484f 841 }
amiraseman 2:1d7ef0f49b35 842 break;
amiraseman 2:1d7ef0f49b35 843 default:
amiraseman 2:1d7ef0f49b35 844 break;
amiraseman 2:1d7ef0f49b35 845 }
amiraseman 4:783276521952 846 if (button3Flag) {
amiraseman 2:1d7ef0f49b35 847 button3Flag=0;
amiraseman 2:1d7ef0f49b35 848 break;
amiraseman 4:783276521952 849 }
amiraseman 5:6952998ab446 850 wait (0.1);
amiraseman 2:1d7ef0f49b35 851 }
amiraseman 2:1d7ef0f49b35 852 }
amiraseman 2:1d7ef0f49b35 853
amiraseman 2:1d7ef0f49b35 854
amiraseman 5:6952998ab446 855 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 856 {
amiraseman 13:213bf5887930 857 wakeUp();
amiraseman 9:d1691d971f63 858
amiraseman 12:d4011389defe 859 stateminus1=fsmA[state].nextState[1];
amiraseman 12:d4011389defe 860 stateminus2=fsmA[stateminus1].nextState[1];
amiraseman 12:d4011389defe 861 stateplus1=fsmA[state].nextState[0];
amiraseman 12:d4011389defe 862 stateplus2=fsmA[stateplus1].nextState[0];
amiraseman 9:d1691d971f63 863
amiraseman 8:8b810c29eb7b 864
amiraseman 11:a78e01c9f054 865 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 866 int dispaly = sprintf (buffer1, "%s", fsmA[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 867 int dispaly1 = sprintf (buffer2, "%s", fsmA[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 868 int dispaly2 = sprintf (buffer3, ">>%s", fsmA[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 869 int dispaly3 = sprintf (buffer4, "%s", fsmA[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 870 int dispaly4 = sprintf (buffer5, "%s", fsmA[stateplus2].title);//convert integer to buffer str
amiraseman 1:e60b9f116d38 871
amiraseman 9:d1691d971f63 872
amiraseman 9:d1691d971f63 873
amiraseman 10:7c976b5a5e25 874 switch (state) {
amiraseman 9:d1691d971f63 875 case 0:
amiraseman 4:783276521952 876 if (button4Flag) {
amiraseman 4:783276521952 877 button4Flag=0;
amiraseman 12:d4011389defe 878 timerFlag=1;
amiraseman 8:8b810c29eb7b 879 timer.attach(&timerExpired,1.0);
amiraseman 12:d4011389defe 880 liveData();
amiraseman 4:783276521952 881 }
amiraseman 1:e60b9f116d38 882 break;
amiraseman 9:d1691d971f63 883 case 1:
amiraseman 8:8b810c29eb7b 884 if (button4Flag) {
amiraseman 8:8b810c29eb7b 885 button4Flag=0;
amiraseman 8:8b810c29eb7b 886 dataLogger();
amiraseman 8:8b810c29eb7b 887 }
amiraseman 1:e60b9f116d38 888 break;
amiraseman 9:d1691d971f63 889 case 2:
amiraseman 9:d1691d971f63 890 break;
amiraseman 1:e60b9f116d38 891 case 3:
amiraseman 1:e60b9f116d38 892 break;
amiraseman 1:e60b9f116d38 893 case 4:
amiraseman 2:1d7ef0f49b35 894 if (button4Flag) {
amiraseman 2:1d7ef0f49b35 895 button4Flag=0;
amiraseman 2:1d7ef0f49b35 896 settingsMenu();
amiraseman 2:1d7ef0f49b35 897 }
amiraseman 1:e60b9f116d38 898 break;
amiraseman 1:e60b9f116d38 899 default:
amiraseman 1:e60b9f116d38 900 break;
amiraseman 1:e60b9f116d38 901 }
amiraseman 1:e60b9f116d38 902 }
amiraseman 1:e60b9f116d38 903
amiraseman 1:e60b9f116d38 904
amiraseman 1:e60b9f116d38 905
amiraseman 2:1d7ef0f49b35 906
amiraseman 0:d78ac68077c6 907 int main()
amiraseman 0:d78ac68077c6 908 {
amiraseman 0:d78ac68077c6 909
amiraseman 0:d78ac68077c6 910 // initiliase barometer
amiraseman 0:d78ac68077c6 911 bmp180.init();
amiraseman 0:d78ac68077c6 912 lcd.init();
amiraseman 3:8a559b949470 913 serial.attach(&serialISR);
amiraseman 1:e60b9f116d38 914 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 915 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 2:1d7ef0f49b35 916 button3.rise(&button3Pressed);
amiraseman 2:1d7ef0f49b35 917 button4.rise(&button4Pressed);
amiraseman 8:8b810c29eb7b 918 dataLoggerTimer.attach(&dataLoggerTimerExpired , dataLoggerTime);
amiraseman 4:783276521952 919 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 13:213bf5887930 920 powerSaverCheck();
amiraseman 6:03f12eda070d 921
amiraseman 0:d78ac68077c6 922 while(1) {
amiraseman 3:8a559b949470 923 updateTime();
amiraseman 15:c6f7c4768cf2 924 loggerData();
amiraseman 1:e60b9f116d38 925 startMenu();
amiraseman 9:d1691d971f63 926 display();
amiraseman 4:783276521952 927 wait (0.1);
amiraseman 0:d78ac68077c6 928 }
amiraseman 0:d78ac68077c6 929 }
amiraseman 0:d78ac68077c6 930
amiraseman 0:d78ac68077c6 931
amiraseman 0:d78ac68077c6 932