Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Wed Apr 22 17:21:09 2015 +0000
Revision:
12:d4011389defe
Parent:
11:a78e01c9f054
Child:
13:213bf5887930
Date/time and units done using fsm machines.

Who changed what in which revision?

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