Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Tue Apr 21 09:48:05 2015 +0000
Revision:
11:a78e01c9f054
Parent:
10:7c976b5a5e25
Child:
12:d4011389defe
fsm for the date time settings done. Ask Craig about the problem. How to save an int in a fsm;

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 11:a78e01c9f054 41 int month=4;
amiraseman 11:a78e01c9f054 42 int day=21;
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 11:a78e01c9f054 90 int state=0; // used to navigate through the finite machines fsmA and fsmB
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 11:a78e01c9f054 95 int state1=0; // used to navigate through the finite machines
amiraseman 11:a78e01c9f054 96 int state1plus1 ;
amiraseman 11:a78e01c9f054 97 int state1plus2 ;
amiraseman 11:a78e01c9f054 98 int state1minus1 ;
amiraseman 11:a78e01c9f054 99 int state1minus2 ;
amiraseman 9:d1691d971f63 100
amiraseman 10:7c976b5a5e25 101
amiraseman 10:7c976b5a5e25 102
amiraseman 10:7c976b5a5e25 103 struct State {
amiraseman 9:d1691d971f63 104 int output;
amiraseman 9:d1691d971f63 105 char title[12];
amiraseman 9:d1691d971f63 106 int nextState[2];
amiraseman 9:d1691d971f63 107 };
amiraseman 9:d1691d971f63 108
amiraseman 10:7c976b5a5e25 109 typedef const struct State STyp1;
amiraseman 9:d1691d971f63 110
amiraseman 9:d1691d971f63 111 STyp1 fsmA[5] = {
amiraseman 9:d1691d971f63 112 {0,"Live Data",{1,4}},
amiraseman 9:d1691d971f63 113 {1,"Saved Data",{2,0}},
amiraseman 9:d1691d971f63 114 {2,"Forecast",{3,1}},
amiraseman 9:d1691d971f63 115 {3,"Alarms",{4,2}},
amiraseman 9:d1691d971f63 116 {4,"Settings",{0,3}},
amiraseman 9:d1691d971f63 117 };
amiraseman 10:7c976b5a5e25 118
amiraseman 10:7c976b5a5e25 119 typedef const struct State STyp2;
amiraseman 9:d1691d971f63 120
amiraseman 9:d1691d971f63 121 STyp2 fsmB[5] = {
amiraseman 9:d1691d971f63 122 {0,"Date/Time",{1,4}},
amiraseman 9:d1691d971f63 123 {1,"Units",{2,0}},
amiraseman 9:d1691d971f63 124 {2,"Brightness",{3,1}},
amiraseman 9:d1691d971f63 125 {3,"Power",{4,2}},
amiraseman 9:d1691d971f63 126 {4,"Logger",{0,3}},
amiraseman 9:d1691d971f63 127 };
amiraseman 9:d1691d971f63 128
amiraseman 11:a78e01c9f054 129 typedef const struct State STyp3;
amiraseman 11:a78e01c9f054 130
amiraseman 11:a78e01c9f054 131 STyp3 fsmC[5] = {
amiraseman 11:a78e01c9f054 132 {12,"Hour:",{1,4}},
amiraseman 11:a78e01c9f054 133 {0,"Min:",{2,0}},
amiraseman 11:a78e01c9f054 134 {21,"Day",{3,1}},
amiraseman 11:a78e01c9f054 135 {4,"Month",{4,2}},
amiraseman 11:a78e01c9f054 136 {2015,"Year",{0,3}},
amiraseman 11:a78e01c9f054 137 };
amiraseman 11:a78e01c9f054 138
amiraseman 11:a78e01c9f054 139
amiraseman 11:a78e01c9f054 140
amiraseman 11:a78e01c9f054 141
amiraseman 11:a78e01c9f054 142
amiraseman 0:d78ac68077c6 143
amiraseman 3:8a559b949470 144
amiraseman 1:e60b9f116d38 145 void button1Pressed() //ISR to subtract 1 from the value of choice when the first button is pressed
amiraseman 1:e60b9f116d38 146 {
amiraseman 10:7c976b5a5e25 147 state=fsmA[state].nextState[1];
amiraseman 10:7c976b5a5e25 148 state=fsmB[state].nextState[1];
amiraseman 11:a78e01c9f054 149 state=fsmC[state].nextState[1];
amiraseman 1:e60b9f116d38 150 }
amiraseman 1:e60b9f116d38 151
amiraseman 1:e60b9f116d38 152
amiraseman 1:e60b9f116d38 153
amiraseman 1:e60b9f116d38 154 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
amiraseman 1:e60b9f116d38 155 {
amiraseman 10:7c976b5a5e25 156 state=fsmA[state].nextState[0];
amiraseman 10:7c976b5a5e25 157 state=fsmB[state].nextState[0];
amiraseman 11:a78e01c9f054 158 state=fsmC[state].nextState[0];
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 9:d1691d971f63 233 lcd.printString(buffer2,6,2);
amiraseman 9:d1691d971f63 234 lcd.printString(buffer3,12,3);
amiraseman 9:d1691d971f63 235 lcd.printString(buffer4,6,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 1:e60b9f116d38 282 void displayData() //Prints the buffers on the LCD
amiraseman 0:d78ac68077c6 283 {
amiraseman 4:783276521952 284 lcd.clear();
amiraseman 0:d78ac68077c6 285 if (length <= 14) { // if string will fit on display
amiraseman 0:d78ac68077c6 286 lcd.printString(bufferT,0,1); // display on screen
amiraseman 0:d78ac68077c6 287 lcd.printString(bufferP,0,2);
amiraseman 0:d78ac68077c6 288 lcd.printString(bufferTime,0,3);
amiraseman 0:d78ac68077c6 289 lcd.printString(bufferDate,0,4);
amiraseman 0:d78ac68077c6 290 }
amiraseman 0:d78ac68077c6 291 }
amiraseman 0:d78ac68077c6 292
amiraseman 0:d78ac68077c6 293
amiraseman 1:e60b9f116d38 294
amiraseman 1:e60b9f116d38 295
amiraseman 6:03f12eda070d 296
amiraseman 6:03f12eda070d 297
amiraseman 6:03f12eda070d 298
amiraseman 6:03f12eda070d 299 void savePower() // turns off the LCD to save power
amiraseman 6:03f12eda070d 300 {
amiraseman 6:03f12eda070d 301
amiraseman 6:03f12eda070d 302 lcd.turnOff () ; //turns off the lcd
amiraseman 6:03f12eda070d 303 lcdPowerFlag = 0 ; // A flag is set to indicate the state of the LCD
amiraseman 6:03f12eda070d 304
amiraseman 6:03f12eda070d 305 }
amiraseman 6:03f12eda070d 306
amiraseman 6:03f12eda070d 307
amiraseman 6:03f12eda070d 308
amiraseman 6:03f12eda070d 309
amiraseman 6:03f12eda070d 310
amiraseman 6:03f12eda070d 311
amiraseman 7:328dc986484f 312
amiraseman 7:328dc986484f 313 void powerSaverCheck() // checks if the powersaverFlag is set
amiraseman 7:328dc986484f 314 {
amiraseman 7:328dc986484f 315
amiraseman 7:328dc986484f 316 if (powerSaverFlag == 1 ) {
amiraseman 7:328dc986484f 317
amiraseman 7:328dc986484f 318 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 7:328dc986484f 319
amiraseman 7:328dc986484f 320 }
amiraseman 7:328dc986484f 321
amiraseman 7:328dc986484f 322 else {
amiraseman 7:328dc986484f 323 powerSaverTimeout.detach();
amiraseman 7:328dc986484f 324
amiraseman 7:328dc986484f 325 }
amiraseman 7:328dc986484f 326 }
amiraseman 7:328dc986484f 327
amiraseman 7:328dc986484f 328
amiraseman 7:328dc986484f 329
amiraseman 6:03f12eda070d 330 void wakeUp () //Turns the LCD on after the mbed is interrupted
amiraseman 6:03f12eda070d 331 {
amiraseman 6:03f12eda070d 332
amiraseman 6:03f12eda070d 333 if (button1Flag || button2Flag || button3Flag || button4Flag ) {
amiraseman 6:03f12eda070d 334
amiraseman 6:03f12eda070d 335
amiraseman 6:03f12eda070d 336 if (lcdPowerFlag == 0) { // if the LCD is powered off
amiraseman 6:03f12eda070d 337 lcdPowerFlag = 1 ;
amiraseman 6:03f12eda070d 338 lcd.init(); // turns the LCD on
amiraseman 6:03f12eda070d 339 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 6:03f12eda070d 340 button1Flag = 0 ;
amiraseman 6:03f12eda070d 341 button2Flag = 0 ;
amiraseman 6:03f12eda070d 342 button3Flag = 0 ;
amiraseman 6:03f12eda070d 343 button4Flag = 0 ;
amiraseman 6:03f12eda070d 344 }
amiraseman 6:03f12eda070d 345 }
amiraseman 6:03f12eda070d 346
amiraseman 6:03f12eda070d 347 }
amiraseman 6:03f12eda070d 348
amiraseman 8:8b810c29eb7b 349 void setLoggerTimer()
amiraseman 8:8b810c29eb7b 350 {
amiraseman 8:8b810c29eb7b 351 switch (dataLoggerTime) {
amiraseman 8:8b810c29eb7b 352 case 1:
amiraseman 8:8b810c29eb7b 353 dataLoggerTimer.attach(&dataLoggerTimerExpired , 300);
amiraseman 8:8b810c29eb7b 354 break;
amiraseman 8:8b810c29eb7b 355 case 2:
amiraseman 8:8b810c29eb7b 356 dataLoggerTimer.attach(&dataLoggerTimerExpired , 600);
amiraseman 8:8b810c29eb7b 357 break;
amiraseman 8:8b810c29eb7b 358 case 3:
amiraseman 8:8b810c29eb7b 359 dataLoggerTimer.attach(&dataLoggerTimerExpired , 900);
amiraseman 8:8b810c29eb7b 360 break;
amiraseman 8:8b810c29eb7b 361 case 4:
amiraseman 8:8b810c29eb7b 362 dataLoggerTimer.attach(&dataLoggerTimerExpired , 1200);
amiraseman 8:8b810c29eb7b 363 break;
amiraseman 8:8b810c29eb7b 364 case 5:
amiraseman 8:8b810c29eb7b 365 dataLoggerTimer.attach(&dataLoggerTimerExpired , 1500);
amiraseman 8:8b810c29eb7b 366 break;
amiraseman 8:8b810c29eb7b 367 case 6:
amiraseman 8:8b810c29eb7b 368 dataLoggerTimer.attach(&dataLoggerTimerExpired , 1800);
amiraseman 8:8b810c29eb7b 369 break;
amiraseman 8:8b810c29eb7b 370 default:
amiraseman 8:8b810c29eb7b 371 break;
amiraseman 8:8b810c29eb7b 372 }
amiraseman 8:8b810c29eb7b 373 }
amiraseman 6:03f12eda070d 374
amiraseman 6:03f12eda070d 375
amiraseman 8:8b810c29eb7b 376 void updateLiveData() //
amiraseman 7:328dc986484f 377 {
amiraseman 8:8b810c29eb7b 378
amiraseman 8:8b810c29eb7b 379 if (timerFlag ) {
amiraseman 8:8b810c29eb7b 380 timerFlag=0;
amiraseman 8:8b810c29eb7b 381 while (1) {
amiraseman 8:8b810c29eb7b 382 wakeUp();
amiraseman 8:8b810c29eb7b 383
amiraseman 7:328dc986484f 384 readData();
amiraseman 7:328dc986484f 385 displayData();
amiraseman 8:8b810c29eb7b 386
amiraseman 8:8b810c29eb7b 387 if (button3Flag) {
amiraseman 8:8b810c29eb7b 388 button3Flag = 0;
amiraseman 8:8b810c29eb7b 389 timer.detach();
amiraseman 8:8b810c29eb7b 390 break;
amiraseman 8:8b810c29eb7b 391 }
amiraseman 8:8b810c29eb7b 392
amiraseman 8:8b810c29eb7b 393 Sleep();
amiraseman 7:328dc986484f 394 }
amiraseman 7:328dc986484f 395 }
amiraseman 7:328dc986484f 396 }
amiraseman 7:328dc986484f 397
amiraseman 7:328dc986484f 398
amiraseman 8:8b810c29eb7b 399
amiraseman 8:8b810c29eb7b 400
amiraseman 8:8b810c29eb7b 401
amiraseman 8:8b810c29eb7b 402 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 403 {
amiraseman 8:8b810c29eb7b 404 if (dataLoggerFlag) {
amiraseman 8:8b810c29eb7b 405 dataLoggerFlag=0;
amiraseman 8:8b810c29eb7b 406 lcd.clear();
amiraseman 8:8b810c29eb7b 407
amiraseman 8:8b810c29eb7b 408 int i = 0 ;
amiraseman 8:8b810c29eb7b 409 int k ;
amiraseman 8:8b810c29eb7b 410 int sumTC = 0;
amiraseman 8:8b810c29eb7b 411 int sumTF = 0;
amiraseman 8:8b810c29eb7b 412 int sumPB = 0;
amiraseman 8:8b810c29eb7b 413 int sumPA = 0;
amiraseman 8:8b810c29eb7b 414 int maxTC = 0 ;
amiraseman 8:8b810c29eb7b 415 minTC = 0 ;
amiraseman 8:8b810c29eb7b 416 maxTF = 0 ;
amiraseman 8:8b810c29eb7b 417 minTF = 0 ;
amiraseman 8:8b810c29eb7b 418 maxPB = 0 ;
amiraseman 8:8b810c29eb7b 419 minPB = 0 ;
amiraseman 8:8b810c29eb7b 420 maxPA = 0 ;
amiraseman 8:8b810c29eb7b 421 minPA = 0 ;
amiraseman 8:8b810c29eb7b 422 i++;
amiraseman 8:8b810c29eb7b 423
amiraseman 8:8b810c29eb7b 424 //write the data to the arrays (arrays used to plot graphs)
amiraseman 8:8b810c29eb7b 425 //read the data from sensor
amiraseman 8:8b810c29eb7b 426 readData();
amiraseman 8:8b810c29eb7b 427 //Store the values in the array
amiraseman 8:8b810c29eb7b 428 arrayTC[i] = temperatureC;
amiraseman 8:8b810c29eb7b 429 arrayTF[i] = temperatureF;
amiraseman 8:8b810c29eb7b 430 arrayPB[i] = pressureMB;
amiraseman 8:8b810c29eb7b 431 arrayPA[i] = pressureATM;
amiraseman 8:8b810c29eb7b 432
amiraseman 8:8b810c29eb7b 433 // calculate the average value of the arrays and save them to an integer
amiraseman 8:8b810c29eb7b 434
amiraseman 8:8b810c29eb7b 435 for (k = 0 ; k<i ; k++) {
amiraseman 8:8b810c29eb7b 436 sumTC += arrayTC[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 437 avgTC = sumTC/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 438 sumTF += arrayTF[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 439 avgTF = sumTF/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 440 sumPB += arrayPB[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 441 avgPB = sumTC/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 442 sumPA += arrayPA[k]; // calculates the sum of the stored values
amiraseman 8:8b810c29eb7b 443 avgPA = sumPA/k ; //calculates the average value
amiraseman 8:8b810c29eb7b 444
amiraseman 8:8b810c29eb7b 445 if(arrayTC[i]>maxTC) { // finds the biggest value of the array
amiraseman 8:8b810c29eb7b 446 maxTC=arrayTC[i];
amiraseman 8:8b810c29eb7b 447 }
amiraseman 8:8b810c29eb7b 448 if(arrayTC[i]<minTC) { // finds the smallest value of the array
amiraseman 8:8b810c29eb7b 449 minTC=arrayTC[i];
amiraseman 8:8b810c29eb7b 450 }
amiraseman 8:8b810c29eb7b 451 if(arrayTF[i]>maxTF) {
amiraseman 8:8b810c29eb7b 452 maxTF=arrayTF[i];
amiraseman 8:8b810c29eb7b 453 }
amiraseman 8:8b810c29eb7b 454 if(arrayTF[i]<minTF) {
amiraseman 8:8b810c29eb7b 455 minTF=arrayTF[i];
amiraseman 8:8b810c29eb7b 456 }
amiraseman 8:8b810c29eb7b 457 if(arrayPB[i]>maxPB) {
amiraseman 8:8b810c29eb7b 458 maxPB=arrayPB[i];
amiraseman 8:8b810c29eb7b 459 }
amiraseman 8:8b810c29eb7b 460 if(arrayPB[i]<minPB) {
amiraseman 8:8b810c29eb7b 461 minPB=arrayPB[i];
amiraseman 8:8b810c29eb7b 462 }
amiraseman 8:8b810c29eb7b 463 if(arrayPA[i]>maxPA) {
amiraseman 8:8b810c29eb7b 464 maxPA=arrayPA[i];
amiraseman 8:8b810c29eb7b 465 }
amiraseman 8:8b810c29eb7b 466 if(arrayPA[i]<minPA) {
amiraseman 8:8b810c29eb7b 467 minPA=arrayPA[i];
amiraseman 8:8b810c29eb7b 468 }
amiraseman 8:8b810c29eb7b 469
amiraseman 8:8b810c29eb7b 470
amiraseman 8:8b810c29eb7b 471
amiraseman 8:8b810c29eb7b 472 }
amiraseman 8:8b810c29eb7b 473
amiraseman 8:8b810c29eb7b 474 if (i>83) {
amiraseman 8:8b810c29eb7b 475 lcd.clear();
amiraseman 8:8b810c29eb7b 476 i=0;
amiraseman 8:8b810c29eb7b 477 }
amiraseman 8:8b810c29eb7b 478
amiraseman 8:8b810c29eb7b 479 }
amiraseman 8:8b810c29eb7b 480 }
amiraseman 8:8b810c29eb7b 481
amiraseman 8:8b810c29eb7b 482
amiraseman 8:8b810c29eb7b 483
amiraseman 8:8b810c29eb7b 484
amiraseman 8:8b810c29eb7b 485 void dataLogger() // shows a summery of data and the graphs
amiraseman 8:8b810c29eb7b 486 {
amiraseman 8:8b810c29eb7b 487 leds = 0;
amiraseman 8:8b810c29eb7b 488 choice = 1;
amiraseman 8:8b810c29eb7b 489 char Max[2] = {0};
amiraseman 8:8b810c29eb7b 490 char Min[2] = {0};
amiraseman 8:8b810c29eb7b 491 char Avg[2] = {0};
amiraseman 8:8b810c29eb7b 492 while (1) {
amiraseman 8:8b810c29eb7b 493 updateLoggerData();
amiraseman 8:8b810c29eb7b 494 int min = sprintf (Min, "Min = %d", minTC);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 495 int max = sprintf (Max, "Max = %d", maxTC);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 496 int avg = sprintf (Avg, "Avg = %d", avgTC);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 497 //int mn = sprintf (Min, "Min = %d", minPB);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 498 //int mx = sprintf (Max, "Max = %d", maxPB);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 499 //int ag = sprintf (Avg, "Avg = %d", avgPB);//convert integer to buffer str
amiraseman 8:8b810c29eb7b 500
amiraseman 8:8b810c29eb7b 501 if (choice < 1) {
amiraseman 8:8b810c29eb7b 502 choice =4 ;
amiraseman 8:8b810c29eb7b 503 }
amiraseman 8:8b810c29eb7b 504 if (choice > 4 ) {
amiraseman 8:8b810c29eb7b 505 choice = 1;
amiraseman 8:8b810c29eb7b 506 }
amiraseman 8:8b810c29eb7b 507
amiraseman 8:8b810c29eb7b 508 switch (choice) {
amiraseman 8:8b810c29eb7b 509 case 1 : {
amiraseman 8:8b810c29eb7b 510 lcd.clear();
amiraseman 9:d1691d971f63 511 leds = 1 ;
amiraseman 8:8b810c29eb7b 512 lcd.printString(bufferTime,48,0);
amiraseman 8:8b810c29eb7b 513 lcd.printString("Temperature",36,1);
amiraseman 8:8b810c29eb7b 514 lcd.printString(Min,0,2);
amiraseman 8:8b810c29eb7b 515 lcd.printString(Avg,0,3);
amiraseman 8:8b810c29eb7b 516 lcd.printString(Max,0,4);
amiraseman 8:8b810c29eb7b 517 lcd.printString("Next",40,5);
amiraseman 8:8b810c29eb7b 518
amiraseman 8:8b810c29eb7b 519
amiraseman 8:8b810c29eb7b 520 break;
amiraseman 8:8b810c29eb7b 521 }
amiraseman 8:8b810c29eb7b 522 case 2 :
amiraseman 8:8b810c29eb7b 523 lcd.clear();
amiraseman 9:d1691d971f63 524 leds = 2 ;
amiraseman 8:8b810c29eb7b 525 break;
amiraseman 8:8b810c29eb7b 526 case 3 :
amiraseman 8:8b810c29eb7b 527 lcd.clear();
amiraseman 9:d1691d971f63 528 leds = 4 ;
amiraseman 8:8b810c29eb7b 529 lcd.printString(bufferTime,48,0);
amiraseman 8:8b810c29eb7b 530 lcd.printString("Temperature",36,1);
amiraseman 8:8b810c29eb7b 531 lcd.printString(Min,0,2);
amiraseman 8:8b810c29eb7b 532 lcd.printString(Avg,0,3);
amiraseman 8:8b810c29eb7b 533 lcd.printString(Max,0,4);
amiraseman 8:8b810c29eb7b 534 lcd.printString("Next",40,5);
amiraseman 8:8b810c29eb7b 535
amiraseman 8:8b810c29eb7b 536 break;
amiraseman 8:8b810c29eb7b 537 case 4 :
amiraseman 9:d1691d971f63 538 leds = 8 ;
amiraseman 8:8b810c29eb7b 539 lcd.clear();
amiraseman 8:8b810c29eb7b 540 break;
amiraseman 8:8b810c29eb7b 541 default :
amiraseman 8:8b810c29eb7b 542
amiraseman 8:8b810c29eb7b 543 break;
amiraseman 8:8b810c29eb7b 544 }
amiraseman 8:8b810c29eb7b 545 }
amiraseman 8:8b810c29eb7b 546 }
amiraseman 8:8b810c29eb7b 547
amiraseman 7:328dc986484f 548 void dataLoggerSetting()
amiraseman 7:328dc986484f 549 {
amiraseman 7:328dc986484f 550
amiraseman 7:328dc986484f 551 lcd.clear();
amiraseman 7:328dc986484f 552 choice = dataLoggerFlag ;
amiraseman 7:328dc986484f 553 powerSaverCheck();
amiraseman 7:328dc986484f 554
amiraseman 8:8b810c29eb7b 555
amiraseman 8:8b810c29eb7b 556
amiraseman 7:328dc986484f 557 while (1) {
amiraseman 7:328dc986484f 558 wakeUp();
amiraseman 7:328dc986484f 559
amiraseman 7:328dc986484f 560 if (choice < 1) {
amiraseman 7:328dc986484f 561 choice = 2;
amiraseman 7:328dc986484f 562 }
amiraseman 7:328dc986484f 563 if (choice > 2) {
amiraseman 7:328dc986484f 564 choice = 1;
amiraseman 7:328dc986484f 565 }
amiraseman 7:328dc986484f 566
amiraseman 7:328dc986484f 567 switch (choice) {
amiraseman 7:328dc986484f 568 case 1:
amiraseman 7:328dc986484f 569
amiraseman 7:328dc986484f 570 lcd.clear();
amiraseman 7:328dc986484f 571 lcd.printString(bufferTime,48,0);
amiraseman 7:328dc986484f 572 lcd.printString("Data Logger :",0,1);
amiraseman 7:328dc986484f 573 lcd.printString("ON",0,2);
amiraseman 8:8b810c29eb7b 574 lcd.printString("Save on RAM :",0,3);
amiraseman 7:328dc986484f 575 lcd.printString(DataLoggerTime,0,4);
amiraseman 7:328dc986484f 576 lcd.printString("Back Save",0,5);
amiraseman 7:328dc986484f 577
amiraseman 7:328dc986484f 578 if (button4Flag) {
amiraseman 7:328dc986484f 579 button4Flag=0;
amiraseman 8:8b810c29eb7b 580 saveToFileFlag ++;
amiraseman 7:328dc986484f 581 dataLoggerFlag = 1 ;
amiraseman 7:328dc986484f 582 }
amiraseman 7:328dc986484f 583
amiraseman 7:328dc986484f 584
amiraseman 7:328dc986484f 585 break;
amiraseman 7:328dc986484f 586 case 2:
amiraseman 7:328dc986484f 587 lcd.clear();
amiraseman 7:328dc986484f 588 lcd.printString(bufferTime,48,0);
amiraseman 7:328dc986484f 589 lcd.printString("Data Logger : ",0,1);
amiraseman 7:328dc986484f 590 lcd.printString("OFF",0,2);
amiraseman 7:328dc986484f 591 lcd.printString("Back Save",0,5);
amiraseman 7:328dc986484f 592 if (button4Flag) {
amiraseman 7:328dc986484f 593 button4Flag=0;
amiraseman 7:328dc986484f 594 dataLoggerFlag = 0 ;
amiraseman 8:8b810c29eb7b 595 dataLoggerTimer.detach();
amiraseman 7:328dc986484f 596
amiraseman 7:328dc986484f 597 }
amiraseman 7:328dc986484f 598
amiraseman 7:328dc986484f 599 default:
amiraseman 7:328dc986484f 600 break;
amiraseman 7:328dc986484f 601
amiraseman 7:328dc986484f 602 }
amiraseman 7:328dc986484f 603
amiraseman 7:328dc986484f 604 wait (0.1);
amiraseman 7:328dc986484f 605 if (button3Flag) {
amiraseman 7:328dc986484f 606 button3Flag=0;
amiraseman 7:328dc986484f 607 break;
amiraseman 7:328dc986484f 608 }
amiraseman 7:328dc986484f 609 }
amiraseman 7:328dc986484f 610
amiraseman 7:328dc986484f 611
amiraseman 7:328dc986484f 612
amiraseman 7:328dc986484f 613 }
amiraseman 6:03f12eda070d 614
amiraseman 6:03f12eda070d 615
amiraseman 6:03f12eda070d 616
amiraseman 6:03f12eda070d 617
amiraseman 6:03f12eda070d 618
amiraseman 6:03f12eda070d 619
amiraseman 6:03f12eda070d 620
amiraseman 6:03f12eda070d 621
amiraseman 6:03f12eda070d 622
amiraseman 6:03f12eda070d 623
amiraseman 6:03f12eda070d 624
amiraseman 6:03f12eda070d 625
amiraseman 6:03f12eda070d 626 void powerSaverSetting()
amiraseman 6:03f12eda070d 627 {
amiraseman 6:03f12eda070d 628
amiraseman 6:03f12eda070d 629
amiraseman 6:03f12eda070d 630 lcd.clear();
amiraseman 6:03f12eda070d 631 choice = powerSaverFlag ;
amiraseman 6:03f12eda070d 632
amiraseman 6:03f12eda070d 633 while (1) {
amiraseman 6:03f12eda070d 634 wakeUp();
amiraseman 7:328dc986484f 635 int time = sprintf (PowerSaverTime, "%d min", powerSaverTime/60);//convert integer to buffer str
amiraseman 6:03f12eda070d 636
amiraseman 6:03f12eda070d 637 if (choice < 1) {
amiraseman 6:03f12eda070d 638 choice = 2;
amiraseman 6:03f12eda070d 639 }
amiraseman 6:03f12eda070d 640 if (choice > 2) {
amiraseman 6:03f12eda070d 641 choice = 1;
amiraseman 6:03f12eda070d 642 }
amiraseman 7:328dc986484f 643 if (powerSaverTime > 300) {
amiraseman 6:03f12eda070d 644 powerSaverTime = 60 ;
amiraseman 7:328dc986484f 645 }
amiraseman 6:03f12eda070d 646
amiraseman 6:03f12eda070d 647
amiraseman 6:03f12eda070d 648 switch (choice) {
amiraseman 6:03f12eda070d 649 case 1:
amiraseman 6:03f12eda070d 650
amiraseman 6:03f12eda070d 651 lcd.clear();
amiraseman 6:03f12eda070d 652 lcd.printString(bufferTime,48,0);
amiraseman 6:03f12eda070d 653 lcd.printString("Power Saver :",0,1);
amiraseman 6:03f12eda070d 654 lcd.printString("ON",0,2);
amiraseman 6:03f12eda070d 655 lcd.printString("Time Out :",0,3);
amiraseman 7:328dc986484f 656 lcd.printString(PowerSaverTime,0,4);
amiraseman 6:03f12eda070d 657 lcd.printString("Back Save",0,5);
amiraseman 6:03f12eda070d 658
amiraseman 6:03f12eda070d 659 if (button4Flag) {
amiraseman 6:03f12eda070d 660 button4Flag=0;
amiraseman 6:03f12eda070d 661 powerSaverFlag = 1 ;
amiraseman 6:03f12eda070d 662 powerSaverTime += 60 ;
amiraseman 8:8b810c29eb7b 663 dataLoggerTimer.attach(&dataLoggerTimerExpired , 5);
amiraseman 6:03f12eda070d 664
amiraseman 6:03f12eda070d 665 }
amiraseman 6:03f12eda070d 666
amiraseman 6:03f12eda070d 667
amiraseman 6:03f12eda070d 668 break;
amiraseman 6:03f12eda070d 669 case 2:
amiraseman 6:03f12eda070d 670 lcd.clear();
amiraseman 6:03f12eda070d 671 lcd.printString(bufferTime,48,0);
amiraseman 6:03f12eda070d 672 lcd.printString("Power Saver : ",0,1);
amiraseman 6:03f12eda070d 673 lcd.printString("OFF",0,2);
amiraseman 6:03f12eda070d 674 lcd.printString("Back Save",0,5);
amiraseman 6:03f12eda070d 675 if (button4Flag) {
amiraseman 6:03f12eda070d 676 button4Flag=0;
amiraseman 6:03f12eda070d 677 powerSaverFlag = 0 ;
amiraseman 6:03f12eda070d 678
amiraseman 6:03f12eda070d 679 }
amiraseman 6:03f12eda070d 680
amiraseman 6:03f12eda070d 681 default:
amiraseman 6:03f12eda070d 682 break;
amiraseman 6:03f12eda070d 683
amiraseman 6:03f12eda070d 684 }
amiraseman 6:03f12eda070d 685
amiraseman 6:03f12eda070d 686 wait (0.1);
amiraseman 6:03f12eda070d 687 powerSaverCheck();
amiraseman 6:03f12eda070d 688 if (button3Flag) {
amiraseman 6:03f12eda070d 689 button3Flag=0;
amiraseman 6:03f12eda070d 690 break;
amiraseman 6:03f12eda070d 691 }
amiraseman 6:03f12eda070d 692 }
amiraseman 6:03f12eda070d 693 }
amiraseman 6:03f12eda070d 694
amiraseman 6:03f12eda070d 695
amiraseman 6:03f12eda070d 696
amiraseman 6:03f12eda070d 697
amiraseman 6:03f12eda070d 698
amiraseman 6:03f12eda070d 699
amiraseman 6:03f12eda070d 700
amiraseman 6:03f12eda070d 701
amiraseman 4:783276521952 702 void calculateUNIXTime()
amiraseman 4:783276521952 703 {
amiraseman 4:783276521952 704 time_t rawtime;
amiraseman 4:783276521952 705 struct tm * timeinfo;
amiraseman 4:783276521952 706
amiraseman 4:783276521952 707 /* get current timeinfo: */
amiraseman 4:783276521952 708 time ( &rawtime ); //or: rawtime = time(0);
amiraseman 4:783276521952 709 /* convert to struct: */
amiraseman 4:783276521952 710 timeinfo = localtime ( &rawtime );
amiraseman 4:783276521952 711
amiraseman 4:783276521952 712 /* now modify the timeinfo to the given date: */
amiraseman 4:783276521952 713 timeinfo->tm_year = year - 1900;
amiraseman 4:783276521952 714 timeinfo->tm_mon = month - 1; //months since January - [0,11]
amiraseman 4:783276521952 715 timeinfo->tm_mday = day; //day of the month - [1,31]
amiraseman 4:783276521952 716 timeinfo->tm_hour = hour; //hours since midnight - [0,23]
amiraseman 4:783276521952 717 timeinfo->tm_min = min; //minutes after the hour - [0,59]
amiraseman 4:783276521952 718 timeinfo->tm_sec = sec; //seconds after the minute - [0,59]
amiraseman 4:783276521952 719
amiraseman 4:783276521952 720 /* call mktime: create unix time stamp from timeinfo struct */
amiraseman 4:783276521952 721 UNIXdate = mktime ( timeinfo );
amiraseman 4:783276521952 722
amiraseman 4:783276521952 723 }
amiraseman 4:783276521952 724
amiraseman 5:6952998ab446 725
amiraseman 5:6952998ab446 726
amiraseman 5:6952998ab446 727
amiraseman 5:6952998ab446 728 void unitsSetting()
amiraseman 5:6952998ab446 729 {
amiraseman 5:6952998ab446 730 choice = 1;
amiraseman 6:03f12eda070d 731 powerSaverCheck();
amiraseman 5:6952998ab446 732 while (1) {
amiraseman 6:03f12eda070d 733 wakeUp();
amiraseman 5:6952998ab446 734
amiraseman 5:6952998ab446 735
amiraseman 5:6952998ab446 736 if (choice < 1) {
amiraseman 5:6952998ab446 737 choice = 4;
amiraseman 5:6952998ab446 738 }
amiraseman 5:6952998ab446 739 if (choice > 4) {
amiraseman 5:6952998ab446 740 choice = 1;
amiraseman 5:6952998ab446 741 }
amiraseman 5:6952998ab446 742
amiraseman 5:6952998ab446 743
amiraseman 5:6952998ab446 744
amiraseman 5:6952998ab446 745 switch (choice) {
amiraseman 5:6952998ab446 746 case 1:
amiraseman 5:6952998ab446 747
amiraseman 5:6952998ab446 748 lcd.clear();
amiraseman 5:6952998ab446 749 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 750 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 751 lcd.printString("C/mb",0,3);
amiraseman 5:6952998ab446 752 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 753
amiraseman 5:6952998ab446 754 if (button4Flag) {
amiraseman 5:6952998ab446 755 button4Flag=0;
amiraseman 5:6952998ab446 756 unitFlag=1;
amiraseman 5:6952998ab446 757 }
amiraseman 5:6952998ab446 758
amiraseman 5:6952998ab446 759
amiraseman 5:6952998ab446 760 break;
amiraseman 5:6952998ab446 761 case 2:
amiraseman 5:6952998ab446 762 lcd.clear();
amiraseman 5:6952998ab446 763 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 764 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 765 lcd.printString("C/atm",0,3);
amiraseman 5:6952998ab446 766 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 767 if (button4Flag) {
amiraseman 5:6952998ab446 768 button4Flag=0;
amiraseman 5:6952998ab446 769 unitFlag=2;
amiraseman 5:6952998ab446 770 }
amiraseman 5:6952998ab446 771 break;
amiraseman 5:6952998ab446 772 case 3:
amiraseman 5:6952998ab446 773 lcd.clear();
amiraseman 5:6952998ab446 774 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 775 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 776 lcd.printString("F/mb",0,3);
amiraseman 5:6952998ab446 777 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 778 if (button4Flag) {
amiraseman 5:6952998ab446 779 button4Flag = 0;
amiraseman 5:6952998ab446 780 unitFlag=3;
amiraseman 5:6952998ab446 781 }
amiraseman 5:6952998ab446 782 break;
amiraseman 5:6952998ab446 783 case 4:
amiraseman 5:6952998ab446 784 lcd.clear();
amiraseman 5:6952998ab446 785 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 786 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 787 lcd.printString("F/atm",0,3);
amiraseman 5:6952998ab446 788 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 789 if (button4Flag) {
amiraseman 5:6952998ab446 790 button4Flag=0;
amiraseman 5:6952998ab446 791 unitFlag=4;
amiraseman 5:6952998ab446 792 }
amiraseman 5:6952998ab446 793 break;
amiraseman 5:6952998ab446 794 default:
amiraseman 5:6952998ab446 795 break;
amiraseman 5:6952998ab446 796
amiraseman 5:6952998ab446 797 }
amiraseman 5:6952998ab446 798 wait (0.1);
amiraseman 5:6952998ab446 799 if (button3Flag) {
amiraseman 5:6952998ab446 800 button3Flag=0;
amiraseman 5:6952998ab446 801 break;
amiraseman 5:6952998ab446 802 }
amiraseman 5:6952998ab446 803 }
amiraseman 5:6952998ab446 804 }
amiraseman 5:6952998ab446 805
amiraseman 5:6952998ab446 806
amiraseman 5:6952998ab446 807
amiraseman 5:6952998ab446 808
amiraseman 5:6952998ab446 809
amiraseman 4:783276521952 810 void brightnessSetting ()
amiraseman 4:783276521952 811 {
amiraseman 4:783276521952 812 lcd.clear();
amiraseman 4:783276521952 813 while(1) {
amiraseman 6:03f12eda070d 814 wakeUp();
amiraseman 5:6952998ab446 815 lcd.clear();
amiraseman 5:6952998ab446 816 lcd.refresh();
amiraseman 5:6952998ab446 817 if (choice < 1) {
amiraseman 5:6952998ab446 818 choice = 6 ;
amiraseman 5:6952998ab446 819 }
amiraseman 5:6952998ab446 820 if (choice > 6) {
amiraseman 4:783276521952 821 choice = 1;
amiraseman 4:783276521952 822 }
amiraseman 5:6952998ab446 823
amiraseman 5:6952998ab446 824
amiraseman 5:6952998ab446 825 if (button4Flag) {
amiraseman 5:6952998ab446 826 button4Flag=0;
amiraseman 5:6952998ab446 827 lcd.setBrightness(choice/10);
amiraseman 5:6952998ab446 828 }
amiraseman 5:6952998ab446 829
amiraseman 4:783276521952 830 if (button3Flag) {
amiraseman 4:783276521952 831 button3Flag=0;
amiraseman 4:783276521952 832 break;
amiraseman 4:783276521952 833 }
amiraseman 4:783276521952 834 }
amiraseman 0:d78ac68077c6 835 }
amiraseman 0:d78ac68077c6 836
amiraseman 0:d78ac68077c6 837
amiraseman 2:1d7ef0f49b35 838
amiraseman 4:783276521952 839 void timeDateSetting()
amiraseman 3:8a559b949470 840 {
amiraseman 11:a78e01c9f054 841 while (1) {
amiraseman 3:8a559b949470 842
amiraseman 4:783276521952 843
amiraseman 3:8a559b949470 844
amiraseman 11:a78e01c9f054 845 lcd.clear();
amiraseman 11:a78e01c9f054 846 wakeUp();
amiraseman 11:a78e01c9f054 847 updateTime();
amiraseman 11:a78e01c9f054 848 int dispaly = sprintf (buffer0, "Back Save");//convert integer to buffer str
amiraseman 11:a78e01c9f054 849 int dispaly1 = sprintf (buffer1, "%s%d", fsmC[stateminus2].title,fsmC[stateminus2].output);//convert integer to buffer str
amiraseman 11:a78e01c9f054 850 int dispaly2 = sprintf (buffer2, "%s%d", fsmC[stateminus1].title,fsmC[stateminus1].output);//convert integer to buffer str
amiraseman 11:a78e01c9f054 851 int dispaly3 = sprintf (buffer3, ">>%s%d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
amiraseman 11:a78e01c9f054 852 int dispaly4 = sprintf (buffer4, "%s%d", fsmC[stateplus1].title,fsmC[stateplus1].output);//convert integer to buffer str
amiraseman 11:a78e01c9f054 853 int dispaly5 = sprintf (buffer5, "%s%d", fsmC[stateplus2].title,fsmC[stateplus2].output);//convert integer to buffer str
amiraseman 11:a78e01c9f054 854
amiraseman 11:a78e01c9f054 855 display();
amiraseman 3:8a559b949470 856
amiraseman 4:783276521952 857
amiraseman 11:a78e01c9f054 858 switch (state) {
amiraseman 11:a78e01c9f054 859 case 0:
amiraseman 4:783276521952 860 if (button4Flag) {
amiraseman 4:783276521952 861 button4Flag= 0;
amiraseman 4:783276521952 862 hour++;
amiraseman 11:a78e01c9f054 863 fsmC[state].output = hour ; //sets the saved value in the struct to the new value chosen by the user
amiraseman 4:783276521952 864 calculateUNIXTime();
amiraseman 4:783276521952 865 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 4:783276521952 866 serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
amiraseman 4:783276521952 867 }
amiraseman 11:a78e01c9f054 868
amiraseman 11:a78e01c9f054 869 break;
amiraseman 11:a78e01c9f054 870 case 1:
amiraseman 11:a78e01c9f054 871
amiraseman 11:a78e01c9f054 872 if (button4Flag) {
amiraseman 11:a78e01c9f054 873 button4Flag= 0;
amiraseman 11:a78e01c9f054 874 min++;
amiraseman 11:a78e01c9f054 875 fsmC[state].output = min;
amiraseman 11:a78e01c9f054 876 calculateUNIXTime();
amiraseman 11:a78e01c9f054 877 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 11:a78e01c9f054 878 serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
amiraseman 11:a78e01c9f054 879 }
amiraseman 11:a78e01c9f054 880 break;
amiraseman 11:a78e01c9f054 881 case 2:
amiraseman 11:a78e01c9f054 882
amiraseman 11:a78e01c9f054 883 if (button4Flag) {
amiraseman 11:a78e01c9f054 884 button4Flag= 0;
amiraseman 11:a78e01c9f054 885 day++;
amiraseman 11:a78e01c9f054 886 fsmC[state].output = min ;
amiraseman 11:a78e01c9f054 887 calculateUNIXTime();
amiraseman 11:a78e01c9f054 888 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 11:a78e01c9f054 889 serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
amiraseman 11:a78e01c9f054 890 }
amiraseman 11:a78e01c9f054 891 break;
amiraseman 11:a78e01c9f054 892 case 3:
amiraseman 11:a78e01c9f054 893
amiraseman 11:a78e01c9f054 894 if (button4Flag) {
amiraseman 11:a78e01c9f054 895 button4Flag= 0;
amiraseman 11:a78e01c9f054 896 month++;
amiraseman 11:a78e01c9f054 897 fsmC[state].output = month ;
amiraseman 11:a78e01c9f054 898 calculateUNIXTime();
amiraseman 11:a78e01c9f054 899 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 11:a78e01c9f054 900 serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
amiraseman 11:a78e01c9f054 901 }
amiraseman 11:a78e01c9f054 902 break;
amiraseman 11:a78e01c9f054 903 case 4:
amiraseman 11:a78e01c9f054 904
amiraseman 11:a78e01c9f054 905 if (button4Flag) {
amiraseman 11:a78e01c9f054 906 button4Flag= 0;
amiraseman 11:a78e01c9f054 907 year++;
amiraseman 11:a78e01c9f054 908 fsmC[state].output = year ;
amiraseman 11:a78e01c9f054 909 calculateUNIXTime();
amiraseman 11:a78e01c9f054 910 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 11:a78e01c9f054 911 serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
amiraseman 4:783276521952 912 }
amiraseman 4:783276521952 913 break;
amiraseman 4:783276521952 914 default:
amiraseman 4:783276521952 915 break;
amiraseman 4:783276521952 916 }
amiraseman 11:a78e01c9f054 917 if (button3Flag) {
amiraseman 11:a78e01c9f054 918 button3Flag=0;
amiraseman 11:a78e01c9f054 919 break;
amiraseman 11:a78e01c9f054 920 }
amiraseman 5:6952998ab446 921 wait (0.1);
amiraseman 3:8a559b949470 922 }
amiraseman 3:8a559b949470 923 }
amiraseman 3:8a559b949470 924
amiraseman 3:8a559b949470 925
amiraseman 3:8a559b949470 926
amiraseman 2:1d7ef0f49b35 927
amiraseman 2:1d7ef0f49b35 928 void settingsMenu()
amiraseman 2:1d7ef0f49b35 929 {
amiraseman 11:a78e01c9f054 930 while(1) {
amiraseman 11:a78e01c9f054 931 stateminus1=fsmB[state].nextState[0];
amiraseman 11:a78e01c9f054 932 stateminus2=fsmB[stateminus1].nextState[0];
amiraseman 11:a78e01c9f054 933 stateplus1=fsmB[state].nextState[1];
amiraseman 11:a78e01c9f054 934 stateplus2=fsmB[stateplus1].nextState[1];
amiraseman 6:03f12eda070d 935
amiraseman 6:03f12eda070d 936
amiraseman 9:d1691d971f63 937 lcd.clear();
amiraseman 6:03f12eda070d 938 wakeUp();
amiraseman 3:8a559b949470 939 updateTime();
amiraseman 11:a78e01c9f054 940 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 941 int dispaly = sprintf (buffer1, "%s", fsmB[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 942 int dispaly1 = sprintf (buffer2, "%s", fsmB[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 943 int dispaly2 = sprintf (buffer3, ">>%s", fsmB[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 944 int dispaly3 = sprintf (buffer4, "%s", fsmB[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 945 int dispaly4 = sprintf (buffer5, "%s", fsmB[stateplus2].title);//convert integer to buffer str
amiraseman 9:d1691d971f63 946
amiraseman 9:d1691d971f63 947 display();
amiraseman 9:d1691d971f63 948
amiraseman 9:d1691d971f63 949
amiraseman 10:7c976b5a5e25 950 switch (state) {
amiraseman 11:a78e01c9f054 951 case 0:
amiraseman 4:783276521952 952 if (button4Flag) {
amiraseman 4:783276521952 953 button4Flag=0;
amiraseman 4:783276521952 954 timeDateSetting();
amiraseman 4:783276521952 955 }
amiraseman 4:783276521952 956
amiraseman 4:783276521952 957
amiraseman 2:1d7ef0f49b35 958 break;
amiraseman 11:a78e01c9f054 959 case 1:
amiraseman 9:d1691d971f63 960
amiraseman 5:6952998ab446 961
amiraseman 5:6952998ab446 962 if (button4Flag) {
amiraseman 5:6952998ab446 963 button4Flag=0;
amiraseman 5:6952998ab446 964 unitsSetting();
amiraseman 5:6952998ab446 965 }
amiraseman 5:6952998ab446 966
amiraseman 2:1d7ef0f49b35 967 break;
amiraseman 11:a78e01c9f054 968 case 2:
amiraseman 9:d1691d971f63 969
amiraseman 4:783276521952 970 if (button4Flag) {
amiraseman 4:783276521952 971 button4Flag = 0;
amiraseman 4:783276521952 972 brightnessSetting();
amiraseman 4:783276521952 973 }
amiraseman 2:1d7ef0f49b35 974 break;
amiraseman 11:a78e01c9f054 975 case 3:
amiraseman 6:03f12eda070d 976 if (button4Flag) {
amiraseman 6:03f12eda070d 977 button4Flag = 0;
amiraseman 6:03f12eda070d 978 powerSaverSetting();
amiraseman 6:03f12eda070d 979 }
amiraseman 2:1d7ef0f49b35 980 break;
amiraseman 11:a78e01c9f054 981 case 4:
amiraseman 7:328dc986484f 982 if (button4Flag) {
amiraseman 7:328dc986484f 983 button4Flag = 0;
amiraseman 7:328dc986484f 984 dataLoggerSetting();
amiraseman 7:328dc986484f 985 }
amiraseman 2:1d7ef0f49b35 986 break;
amiraseman 2:1d7ef0f49b35 987 default:
amiraseman 2:1d7ef0f49b35 988 break;
amiraseman 2:1d7ef0f49b35 989 }
amiraseman 4:783276521952 990 if (button3Flag) {
amiraseman 2:1d7ef0f49b35 991 button3Flag=0;
amiraseman 2:1d7ef0f49b35 992 break;
amiraseman 4:783276521952 993 }
amiraseman 5:6952998ab446 994 wait (0.1);
amiraseman 2:1d7ef0f49b35 995 }
amiraseman 2:1d7ef0f49b35 996 }
amiraseman 2:1d7ef0f49b35 997
amiraseman 2:1d7ef0f49b35 998
amiraseman 5:6952998ab446 999 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 1000 {
amiraseman 6:03f12eda070d 1001 wakeUp();
amiraseman 8:8b810c29eb7b 1002
amiraseman 9:d1691d971f63 1003 lcd.clear();
amiraseman 9:d1691d971f63 1004
amiraseman 10:7c976b5a5e25 1005 stateminus1=fsmA[state].nextState[0];
amiraseman 10:7c976b5a5e25 1006 stateminus2=fsmA[stateminus1].nextState[0];
amiraseman 10:7c976b5a5e25 1007 stateplus1=fsmA[state].nextState[1];
amiraseman 10:7c976b5a5e25 1008 stateplus2=fsmA[stateplus1].nextState[1];
amiraseman 9:d1691d971f63 1009
amiraseman 8:8b810c29eb7b 1010
amiraseman 11:a78e01c9f054 1011 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 1012 int dispaly = sprintf (buffer1, "%s", fsmA[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1013 int dispaly1 = sprintf (buffer2, "%s", fsmA[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1014 int dispaly2 = sprintf (buffer3, ">>%s", fsmA[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1015 int dispaly3 = sprintf (buffer4, "%s", fsmA[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1016 int dispaly4 = sprintf (buffer5, "%s", fsmA[stateplus2].title);//convert integer to buffer str
amiraseman 1:e60b9f116d38 1017
amiraseman 9:d1691d971f63 1018
amiraseman 9:d1691d971f63 1019
amiraseman 10:7c976b5a5e25 1020 switch (state) {
amiraseman 9:d1691d971f63 1021 case 0:
amiraseman 4:783276521952 1022 if (button4Flag) {
amiraseman 4:783276521952 1023 button4Flag=0;
amiraseman 8:8b810c29eb7b 1024 timer.attach(&timerExpired,1.0);
amiraseman 8:8b810c29eb7b 1025 updateLiveData();
amiraseman 4:783276521952 1026 }
amiraseman 1:e60b9f116d38 1027 break;
amiraseman 9:d1691d971f63 1028 case 1:
amiraseman 8:8b810c29eb7b 1029 if (button4Flag) {
amiraseman 8:8b810c29eb7b 1030 button4Flag=0;
amiraseman 8:8b810c29eb7b 1031 dataLogger();
amiraseman 8:8b810c29eb7b 1032 }
amiraseman 1:e60b9f116d38 1033 break;
amiraseman 9:d1691d971f63 1034 case 2:
amiraseman 9:d1691d971f63 1035 break;
amiraseman 1:e60b9f116d38 1036 case 3:
amiraseman 1:e60b9f116d38 1037 break;
amiraseman 1:e60b9f116d38 1038 case 4:
amiraseman 2:1d7ef0f49b35 1039 if (button4Flag) {
amiraseman 2:1d7ef0f49b35 1040 button4Flag=0;
amiraseman 2:1d7ef0f49b35 1041 settingsMenu();
amiraseman 2:1d7ef0f49b35 1042 }
amiraseman 1:e60b9f116d38 1043 break;
amiraseman 1:e60b9f116d38 1044 default:
amiraseman 1:e60b9f116d38 1045 break;
amiraseman 1:e60b9f116d38 1046 }
amiraseman 1:e60b9f116d38 1047 }
amiraseman 1:e60b9f116d38 1048
amiraseman 1:e60b9f116d38 1049
amiraseman 1:e60b9f116d38 1050
amiraseman 2:1d7ef0f49b35 1051
amiraseman 0:d78ac68077c6 1052 int main()
amiraseman 0:d78ac68077c6 1053 {
amiraseman 0:d78ac68077c6 1054
amiraseman 0:d78ac68077c6 1055 // initiliase barometer
amiraseman 0:d78ac68077c6 1056 bmp180.init();
amiraseman 0:d78ac68077c6 1057 lcd.init();
amiraseman 3:8a559b949470 1058 serial.attach(&serialISR);
amiraseman 1:e60b9f116d38 1059 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 1060 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 2:1d7ef0f49b35 1061 button3.rise(&button3Pressed);
amiraseman 2:1d7ef0f49b35 1062 button4.rise(&button4Pressed);
amiraseman 8:8b810c29eb7b 1063 dataLoggerTimer.attach(&dataLoggerTimerExpired , dataLoggerTime);
amiraseman 4:783276521952 1064 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 0:d78ac68077c6 1065
amiraseman 6:03f12eda070d 1066
amiraseman 6:03f12eda070d 1067 powerSaverCheck();
amiraseman 6:03f12eda070d 1068
amiraseman 0:d78ac68077c6 1069 while(1) {
amiraseman 3:8a559b949470 1070 updateTime();
amiraseman 1:e60b9f116d38 1071 startMenu();
amiraseman 9:d1691d971f63 1072 display();
amiraseman 4:783276521952 1073 wait (0.1);
amiraseman 0:d78ac68077c6 1074 }
amiraseman 0:d78ac68077c6 1075 }
amiraseman 0:d78ac68077c6 1076
amiraseman 0:d78ac68077c6 1077
amiraseman 0:d78ac68077c6 1078