Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Thu Apr 23 13:26:11 2015 +0000
Revision:
14:f3eb0fb6ecd5
Parent:
13:213bf5887930
Child:
15:c6f7c4768cf2
data logger setting is done. working on the data logger itself

Who changed what in which revision?

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