Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Mon Apr 20 22:06:05 2015 +0000
Revision:
10:7c976b5a5e25
Parent:
9:d1691d971f63
Child:
11:a78e01c9f054
2 fsms (fsma and fsmb) are used to create the menus. final commit of the day

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