Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Wed Apr 29 12:50:00 2015 +0000
Revision:
18:374c452e19db
Parent:
17:99161153081d
Child:
19:61eaa5235ccf
Thresholds done;

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 18:374c452e19db 15 PwmOut redLED(p24);//red
amiraseman 17:99161153081d 16 PwmOut yellowLED(p23);//yellow
amiraseman 18:374c452e19db 17 PwmOut greenLED(p22);//green
amiraseman 17:99161153081d 18 PwmOut buzzer(p21); //buzzer
amiraseman 0:d78ac68077c6 19
amiraseman 0:d78ac68077c6 20 Ticker timer; //Create ticker object for temperature and pressure readings
amiraseman 8:8b810c29eb7b 21 Ticker dataLoggerTimer ; // a ticker object for the data logger functions
amiraseman 6:03f12eda070d 22 Timeout powerSaverTimeout; // create a timeout object for the poweerSaver function
amiraseman 0:d78ac68077c6 23
amiraseman 15:c6f7c4768cf2 24
amiraseman 15:c6f7c4768cf2 25 int i= 0 ; //integer used to indicate the cell number with in an array
amiraseman 0:d78ac68077c6 26 int setTimeFlag = 0; // flag for real time clock ISR
amiraseman 12:d4011389defe 27 int timerFlag = 1; // Flag for tempesrature pressure reading ISR
amiraseman 1:e60b9f116d38 28 int button1Flag = 0;
amiraseman 1:e60b9f116d38 29 int button2Flag = 0 ;
amiraseman 2:1d7ef0f49b35 30 int button3Flag = 0 ;
amiraseman 2:1d7ef0f49b35 31 int button4Flag = 0 ;
amiraseman 5:6952998ab446 32 int unitFlag = 1 ;
amiraseman 6:03f12eda070d 33 int powerSaverFlag = 0 ;
amiraseman 6:03f12eda070d 34 int lcdPowerFlag = 1 ; // Indicates if the LCD is switched on or powered off
amiraseman 7:328dc986484f 35 int dataLoggerFlag = 0 ;
amiraseman 8:8b810c29eb7b 36 int saveToFileFlag = 0 ;
amiraseman 17:99161153081d 37 int runLoggerFlag = 0 ; // if the logger is switched on allows user to go to this option
amiraseman 17:99161153081d 38 int alarmClockFlag = 0 ; //indicates if the alarm clock has been turned on
amiraseman 17:99161153081d 39 int thresholdAlarmFlag = 0 ; // indicates if the thresholds are set
amiraseman 2:1d7ef0f49b35 40
amiraseman 4:783276521952 41 int UNIXdate;
amiraseman 17:99161153081d 42 int currentTime ;
amiraseman 6:03f12eda070d 43 int powerSaverTime = 60;
amiraseman 14:f3eb0fb6ecd5 44 int dataLoggerTime = 60;
amiraseman 15:c6f7c4768cf2 45
amiraseman 15:c6f7c4768cf2 46 int temperature;
amiraseman 15:c6f7c4768cf2 47 float pressure;
amiraseman 15:c6f7c4768cf2 48 int averageTemperature ;
amiraseman 15:c6f7c4768cf2 49 int averagePressure ;
amiraseman 15:c6f7c4768cf2 50 int minTemperature ;
amiraseman 15:c6f7c4768cf2 51 int maxTemperature ;
amiraseman 15:c6f7c4768cf2 52 int minPressure;
amiraseman 15:c6f7c4768cf2 53 int maxPressure;
amiraseman 15:c6f7c4768cf2 54
amiraseman 15:c6f7c4768cf2 55
amiraseman 15:c6f7c4768cf2 56
amiraseman 15:c6f7c4768cf2 57
amiraseman 15:c6f7c4768cf2 58 float arrayT[83] ; // An array to store the values of temperature to draw graphs
amiraseman 15:c6f7c4768cf2 59 float arrayP[83] ; // An array to store the values of pressure to draw graphs
amiraseman 6:03f12eda070d 60
amiraseman 6:03f12eda070d 61
amiraseman 0:d78ac68077c6 62
amiraseman 3:8a559b949470 63 char rxString[16]; //buffer to store recieved string from serial
amiraseman 0:d78ac68077c6 64 char bufferTime[14]; // buffer to store time
amiraseman 0:d78ac68077c6 65 char bufferDate[14]; //buffer to store date
amiraseman 4:783276521952 66 char bufferT[14]; //buffer to store temperature
amiraseman 4:783276521952 67 char bufferP[14]; //buffer to store pressure, each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
amiraseman 0:d78ac68077c6 68 // so can display a string of a maximum 14 characters in length
amiraseman 0:d78ac68077c6 69 // or create formatted strings - ensure they aren't more than 14 characters long
amiraseman 12:d4011389defe 70
amiraseman 12:d4011389defe 71
amiraseman 14:f3eb0fb6ecd5 72
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 17:99161153081d 81 int state=0; // used to navigate through the finite machines
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 18:374c452e19db 87 float frequency[]= {659,554,659,554,659,554,659,554,659,554,659,554};
amiraseman 17:99161153081d 88 //frequency array
amiraseman 17:99161153081d 89 float beat[]= {1,1,1,1,1,1,1,1,1,1,1,1};
amiraseman 17:99161153081d 90 //beat array
amiraseman 10:7c976b5a5e25 91
amiraseman 15:c6f7c4768cf2 92
amiraseman 15:c6f7c4768cf2 93 void savePower();
amiraseman 15:c6f7c4768cf2 94 void loggerData();
amiraseman 17:99161153081d 95 void calculateUNIXTime();
amiraseman 18:374c452e19db 96 void thresholdCheck();
amiraseman 17:99161153081d 97 void alarmClockCheck();
amiraseman 15:c6f7c4768cf2 98
amiraseman 10:7c976b5a5e25 99 struct State {
amiraseman 9:d1691d971f63 100 int output;
amiraseman 12:d4011389defe 101 char title[14];
amiraseman 9:d1691d971f63 102 int nextState[2];
amiraseman 9:d1691d971f63 103 };
amiraseman 9:d1691d971f63 104
amiraseman 12:d4011389defe 105 typedef struct State STyp1; // for the start menu
amiraseman 9:d1691d971f63 106
amiraseman 9:d1691d971f63 107 STyp1 fsmA[5] = {
amiraseman 9:d1691d971f63 108 {0,"Live Data",{1,4}},
amiraseman 9:d1691d971f63 109 {1,"Saved Data",{2,0}},
amiraseman 9:d1691d971f63 110 {2,"Forecast",{3,1}},
amiraseman 9:d1691d971f63 111 {3,"Alarms",{4,2}},
amiraseman 9:d1691d971f63 112 {4,"Settings",{0,3}},
amiraseman 9:d1691d971f63 113 };
amiraseman 10:7c976b5a5e25 114
amiraseman 12:d4011389defe 115 typedef struct State STyp2; // for the settings menu
amiraseman 9:d1691d971f63 116
amiraseman 9:d1691d971f63 117 STyp2 fsmB[5] = {
amiraseman 9:d1691d971f63 118 {0,"Date/Time",{1,4}},
amiraseman 9:d1691d971f63 119 {1,"Units",{2,0}},
amiraseman 13:213bf5887930 120 {2,"Alerts",{3,1}},
amiraseman 9:d1691d971f63 121 {3,"Power",{4,2}},
amiraseman 9:d1691d971f63 122 {4,"Logger",{0,3}},
amiraseman 9:d1691d971f63 123 };
amiraseman 9:d1691d971f63 124
amiraseman 12:d4011389defe 125 typedef struct State STyp3; // for the time/date settings
amiraseman 11:a78e01c9f054 126
amiraseman 11:a78e01c9f054 127 STyp3 fsmC[5] = {
amiraseman 11:a78e01c9f054 128 {12,"Hour:",{1,4}},
amiraseman 11:a78e01c9f054 129 {0,"Min:",{2,0}},
amiraseman 12:d4011389defe 130 {21,"Day:",{3,1}},
amiraseman 12:d4011389defe 131 {4,"Month:",{4,2}},
amiraseman 12:d4011389defe 132 {2015,"Year:",{0,3}},
amiraseman 11:a78e01c9f054 133 };
amiraseman 11:a78e01c9f054 134
amiraseman 11:a78e01c9f054 135
amiraseman 12:d4011389defe 136 typedef struct State STyp4; // for the units settings
amiraseman 12:d4011389defe 137
amiraseman 12:d4011389defe 138 STyp3 fsmD[4] = {
amiraseman 12:d4011389defe 139 {1,"C/mb",{1,3}},
amiraseman 12:d4011389defe 140 {2,"C/atm",{2,0}},
amiraseman 12:d4011389defe 141 {3,"F/mb",{3,1}},
amiraseman 12:d4011389defe 142 {4,"F/atm",{0,2}},
amiraseman 12:d4011389defe 143 };
amiraseman 12:d4011389defe 144
amiraseman 11:a78e01c9f054 145
amiraseman 13:213bf5887930 146 typedef struct State STyp5; // for the Power saver settings
amiraseman 13:213bf5887930 147
amiraseman 13:213bf5887930 148 STyp5 fsmE[2] = {
amiraseman 13:213bf5887930 149 {0,"Off",{1,0}},
amiraseman 13:213bf5887930 150 {60,"On",{0,1}},
amiraseman 13:213bf5887930 151 };
amiraseman 13:213bf5887930 152
amiraseman 13:213bf5887930 153
amiraseman 17:99161153081d 154 typedef struct State Stype6; // for the alarms menu
amiraseman 17:99161153081d 155
amiraseman 17:99161153081d 156 Stype6 fsmF[2] = {
amiraseman 17:99161153081d 157 {0,"Thresholds",{1,0}},
amiraseman 17:99161153081d 158 {1,"Alarm Clock", {0,1}},
amiraseman 17:99161153081d 159 };
amiraseman 17:99161153081d 160
amiraseman 17:99161153081d 161 typedef struct State Stype7; // yes or no
amiraseman 17:99161153081d 162
amiraseman 17:99161153081d 163 Stype7 fsmG[2] = {
amiraseman 18:374c452e19db 164 {1,"Yes",{1,0}},
amiraseman 18:374c452e19db 165 {0,"No", {0,1}},
amiraseman 17:99161153081d 166 };
amiraseman 17:99161153081d 167
amiraseman 18:374c452e19db 168 typedef struct State Stype8; // for the thresholds
amiraseman 11:a78e01c9f054 169
amiraseman 18:374c452e19db 170 Stype8 fsmH[4] = {
amiraseman 18:374c452e19db 171 {20,"Min T:",{1,3}},
amiraseman 18:374c452e19db 172 {30,"Max T:",{2,0}},
amiraseman 18:374c452e19db 173 {1000,"Min P:",{3,1}},
amiraseman 18:374c452e19db 174 {1100,"Max P:",{0,2}},
amiraseman 18:374c452e19db 175 };
amiraseman 11:a78e01c9f054 176
amiraseman 0:d78ac68077c6 177
amiraseman 3:8a559b949470 178
amiraseman 1:e60b9f116d38 179 void button1Pressed() //ISR to subtract 1 from the value of choice when the first button is pressed
amiraseman 1:e60b9f116d38 180 {
amiraseman 10:7c976b5a5e25 181 state=fsmA[state].nextState[1];
amiraseman 13:213bf5887930 182 button1Flag=1;
amiraseman 1:e60b9f116d38 183 }
amiraseman 1:e60b9f116d38 184
amiraseman 1:e60b9f116d38 185
amiraseman 1:e60b9f116d38 186
amiraseman 1:e60b9f116d38 187 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
amiraseman 1:e60b9f116d38 188 {
amiraseman 10:7c976b5a5e25 189 state=fsmA[state].nextState[0];
amiraseman 13:213bf5887930 190 button2Flag=1;
amiraseman 1:e60b9f116d38 191 }
amiraseman 0:d78ac68077c6 192
amiraseman 0:d78ac68077c6 193
amiraseman 2:1d7ef0f49b35 194
amiraseman 2:1d7ef0f49b35 195 void button3Pressed()
amiraseman 2:1d7ef0f49b35 196 {
amiraseman 2:1d7ef0f49b35 197 button3Flag=1;
amiraseman 2:1d7ef0f49b35 198 }
amiraseman 2:1d7ef0f49b35 199
amiraseman 2:1d7ef0f49b35 200
amiraseman 2:1d7ef0f49b35 201
amiraseman 2:1d7ef0f49b35 202 void button4Pressed()
amiraseman 2:1d7ef0f49b35 203 {
amiraseman 2:1d7ef0f49b35 204 button4Flag = 1 ;
amiraseman 2:1d7ef0f49b35 205 }
amiraseman 2:1d7ef0f49b35 206
amiraseman 2:1d7ef0f49b35 207
amiraseman 2:1d7ef0f49b35 208
amiraseman 2:1d7ef0f49b35 209
amiraseman 8:8b810c29eb7b 210 void timerExpired() // ISR which sets the timer flag (flag used to display the buffers on LCD)
amiraseman 8:8b810c29eb7b 211 {
amiraseman 17:99161153081d 212 yellowLED = 0;
amiraseman 8:8b810c29eb7b 213 timerFlag=1;
amiraseman 17:99161153081d 214
amiraseman 8:8b810c29eb7b 215 }
amiraseman 8:8b810c29eb7b 216
amiraseman 8:8b810c29eb7b 217
amiraseman 8:8b810c29eb7b 218
amiraseman 8:8b810c29eb7b 219 void dataLoggerTimerExpired ()
amiraseman 8:8b810c29eb7b 220 {
amiraseman 17:99161153081d 221 yellowLED = 0;
amiraseman 8:8b810c29eb7b 222 dataLoggerFlag = 1 ;
amiraseman 8:8b810c29eb7b 223
amiraseman 8:8b810c29eb7b 224 }
amiraseman 8:8b810c29eb7b 225
amiraseman 8:8b810c29eb7b 226
amiraseman 8:8b810c29eb7b 227
amiraseman 0:d78ac68077c6 228
amiraseman 3:8a559b949470 229 void updateTime()
amiraseman 0:d78ac68077c6 230 {
amiraseman 4:783276521952 231 time_t seconds = time(NULL); // get current time
amiraseman 0:d78ac68077c6 232 // format time into a string (time and date)
amiraseman 17:99161153081d 233 currentTime = seconds ; // sets the current time to an integer for alarm clock check
amiraseman 18:374c452e19db 234 //serial.printf("current time :%i \n",currentTime);
amiraseman 18:374c452e19db 235 //serial.printf("Unix date :%i \n",UNIXdate);
amiraseman 18:374c452e19db 236 strftime(bufferTime, 14 , "%I:%M", localtime(&seconds));
amiraseman 18:374c452e19db 237 strftime(bufferDate, 14 , "%d/%m/%y", localtime(&seconds));
amiraseman 18:374c452e19db 238 if (alarmClockFlag == 1 ) { // if the the alarm clock flag is set by the user
amiraseman 17:99161153081d 239 alarmClockCheck();
amiraseman 17:99161153081d 240 }
amiraseman 0:d78ac68077c6 241 }
amiraseman 0:d78ac68077c6 242
amiraseman 9:d1691d971f63 243 void display()
amiraseman 9:d1691d971f63 244 {
amiraseman 9:d1691d971f63 245 lcd.clear();
amiraseman 11:a78e01c9f054 246 lcd.printString(buffer0,0,0);
amiraseman 9:d1691d971f63 247 lcd.printString(buffer1,0,1);
amiraseman 12:d4011389defe 248 lcd.printString(buffer2,0,2);
amiraseman 12:d4011389defe 249 lcd.printString(buffer3,0,3);
amiraseman 12:d4011389defe 250 lcd.printString(buffer4,0,4);
amiraseman 9:d1691d971f63 251 lcd.printString(buffer5,0,5);
amiraseman 17:99161153081d 252 wait(0.1);
amiraseman 0:d78ac68077c6 253
amiraseman 9:d1691d971f63 254 }
amiraseman 0:d78ac68077c6 255
amiraseman 0:d78ac68077c6 256
amiraseman 0:d78ac68077c6 257
amiraseman 1:e60b9f116d38 258 void readData() //Imports the data and saves them to the bufferss
amiraseman 0:d78ac68077c6 259 {
amiraseman 0:d78ac68077c6 260
amiraseman 0:d78ac68077c6 261 Measurement measurement; // measurement structure declared in BMP180 class
amiraseman 0:d78ac68077c6 262
amiraseman 0:d78ac68077c6 263 // read values (T in Celsius and P in mb) and print over serial port
amiraseman 0:d78ac68077c6 264 measurement = bmp180.readValues();
amiraseman 0:d78ac68077c6 265 // serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
amiraseman 0:d78ac68077c6 266
amiraseman 6:03f12eda070d 267
amiraseman 6:03f12eda070d 268 if (unitFlag==1 || unitFlag==2 ) {
amiraseman 15:c6f7c4768cf2 269
amiraseman 15:c6f7c4768cf2 270 temperature = measurement.temperature;
amiraseman 15:c6f7c4768cf2 271 int length = sprintf(bufferT,"T = %0.1d C",temperature); // print formatted data to buffer
amiraseman 6:03f12eda070d 272 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 273 }
amiraseman 6:03f12eda070d 274 if (unitFlag==3 || unitFlag==4 ) {
amiraseman 15:c6f7c4768cf2 275 temperature =( measurement.temperature*(9/5))+32;
amiraseman 15:c6f7c4768cf2 276 int length = sprintf(bufferT,"T = %0.1d F",temperature); // print formatted data to buffer
amiraseman 6:03f12eda070d 277 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 278 }
amiraseman 0:d78ac68077c6 279
amiraseman 15:c6f7c4768cf2 280
amiraseman 6:03f12eda070d 281
amiraseman 6:03f12eda070d 282
amiraseman 6:03f12eda070d 283 if (unitFlag==1 || unitFlag==3 ) {
amiraseman 15:c6f7c4768cf2 284 pressure = measurement.pressure; // same idea with float
amiraseman 15:c6f7c4768cf2 285 int length = sprintf(bufferP,"P = %.2f mb",pressure); // print formatted data to buffer
amiraseman 6:03f12eda070d 286 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 287 }
amiraseman 6:03f12eda070d 288 if (unitFlag==2 || unitFlag==4 ) {
amiraseman 15:c6f7c4768cf2 289 pressure = measurement.pressure*0.0009869; // same idea with floats
amiraseman 15:c6f7c4768cf2 290 int length = sprintf(bufferP,"P = %.2f atm",pressure); // print formatted data to buffer
amiraseman 6:03f12eda070d 291 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 292 }
amiraseman 0:d78ac68077c6 293
amiraseman 18:374c452e19db 294 if (thresholdAlarmFlag == 1) { // if the flag is set by the user to notify the thresholds
amiraseman 18:374c452e19db 295 serial.printf("thresholds flag checked = 1\n");
amiraseman 18:374c452e19db 296 serial.printf("real values: t %i p %f \n",temperature,pressure);
amiraseman 18:374c452e19db 297 serial.printf("thresholds: mint%i maxt%i minP%i maxP %i \n",fsmH[0].output,fsmH[1].output,fsmH[2].output,fsmH[3].output);
amiraseman 18:374c452e19db 298 thresholdCheck();
amiraseman 18:374c452e19db 299 }
amiraseman 18:374c452e19db 300
amiraseman 8:8b810c29eb7b 301 }
amiraseman 0:d78ac68077c6 302
amiraseman 0:d78ac68077c6 303
amiraseman 15:c6f7c4768cf2 304 void wakeUp () //Turns the LCD on after the mbed is interrupted
amiraseman 15:c6f7c4768cf2 305 {
amiraseman 15:c6f7c4768cf2 306
amiraseman 15:c6f7c4768cf2 307
amiraseman 15:c6f7c4768cf2 308 if (lcdPowerFlag == 0) {// if the LCD is powered off
amiraseman 15:c6f7c4768cf2 309 serial.printf("lcd is off\n");
amiraseman 15:c6f7c4768cf2 310
amiraseman 15:c6f7c4768cf2 311 if (button1Flag || button2Flag || button3Flag || button4Flag) { // if any of the buttons are pressed
amiraseman 15:c6f7c4768cf2 312
amiraseman 15:c6f7c4768cf2 313 serial.printf("one of the buttons are pressed to turn on the lcd\n");
amiraseman 15:c6f7c4768cf2 314 lcdPowerFlag = 1 ; // sets the status of the lcd to powered on
amiraseman 18:374c452e19db 315 //serial.printf("lcd is on\n");
amiraseman 15:c6f7c4768cf2 316 lcd.init(); // turns the LCD on
amiraseman 15:c6f7c4768cf2 317 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 15:c6f7c4768cf2 318 button1Flag = 0 ;
amiraseman 15:c6f7c4768cf2 319 button2Flag = 0 ;
amiraseman 15:c6f7c4768cf2 320 button3Flag = 0 ;
amiraseman 15:c6f7c4768cf2 321 button4Flag = 0 ;
amiraseman 15:c6f7c4768cf2 322
amiraseman 15:c6f7c4768cf2 323 }
amiraseman 15:c6f7c4768cf2 324 }
amiraseman 15:c6f7c4768cf2 325
amiraseman 15:c6f7c4768cf2 326 }
amiraseman 0:d78ac68077c6 327
amiraseman 1:e60b9f116d38 328
amiraseman 1:e60b9f116d38 329
amiraseman 6:03f12eda070d 330
amiraseman 6:03f12eda070d 331
amiraseman 6:03f12eda070d 332 void savePower() // turns off the LCD to save power
amiraseman 6:03f12eda070d 333 {
amiraseman 13:213bf5887930 334 serial.printf("starts saving power\n");
amiraseman 6:03f12eda070d 335 lcd.turnOff () ; //turns off the lcd
amiraseman 13:213bf5887930 336 lcdPowerFlag = 0 ; // A flag is set to indicate the state of the LCD (is switched off)
amiraseman 13:213bf5887930 337 serial.printf("LCD is off\n");
amiraseman 13:213bf5887930 338
amiraseman 6:03f12eda070d 339 }
amiraseman 6:03f12eda070d 340
amiraseman 6:03f12eda070d 341
amiraseman 6:03f12eda070d 342
amiraseman 6:03f12eda070d 343
amiraseman 6:03f12eda070d 344
amiraseman 6:03f12eda070d 345
amiraseman 7:328dc986484f 346
amiraseman 7:328dc986484f 347 void powerSaverCheck() // checks if the powersaverFlag is set
amiraseman 7:328dc986484f 348 {
amiraseman 7:328dc986484f 349
amiraseman 13:213bf5887930 350 if (powerSaverFlag) {
amiraseman 7:328dc986484f 351
amiraseman 13:213bf5887930 352 serial.printf("Timeout attached\n");
amiraseman 7:328dc986484f 353 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 7:328dc986484f 354
amiraseman 7:328dc986484f 355 }
amiraseman 7:328dc986484f 356
amiraseman 7:328dc986484f 357 else {
amiraseman 13:213bf5887930 358 serial.printf("lcd is on\n");
amiraseman 7:328dc986484f 359 powerSaverTimeout.detach();
amiraseman 13:213bf5887930 360 serial.printf("Timeout detached\n");
amiraseman 7:328dc986484f 361
amiraseman 7:328dc986484f 362 }
amiraseman 7:328dc986484f 363 }
amiraseman 7:328dc986484f 364
amiraseman 7:328dc986484f 365
amiraseman 7:328dc986484f 366
amiraseman 6:03f12eda070d 367
amiraseman 12:d4011389defe 368 void liveData() //
amiraseman 7:328dc986484f 369 {
amiraseman 13:213bf5887930 370 powerSaverCheck();
amiraseman 12:d4011389defe 371 while (1) {
amiraseman 15:c6f7c4768cf2 372 updateTime();
amiraseman 12:d4011389defe 373 wakeUp();
amiraseman 17:99161153081d 374 loggerData();
amiraseman 12:d4011389defe 375 if (timerFlag) {
amiraseman 17:99161153081d 376
amiraseman 17:99161153081d 377 yellowLED = 1;
amiraseman 12:d4011389defe 378 timerFlag=0;
amiraseman 7:328dc986484f 379 readData();
amiraseman 12:d4011389defe 380 strncpy(buffer1, bufferTime, 14);
amiraseman 12:d4011389defe 381 strncpy(buffer2, bufferDate, 14);
amiraseman 12:d4011389defe 382 strncpy(buffer3, bufferT, 14);
amiraseman 12:d4011389defe 383 strncpy(buffer4, bufferP, 14);
amiraseman 12:d4011389defe 384 int dispaly = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 12:d4011389defe 385 int dispaly1 = sprintf (buffer0, "");//convert integer to buffer str
amiraseman 12:d4011389defe 386 display();
amiraseman 12:d4011389defe 387 }
amiraseman 17:99161153081d 388 yellowLED = 0;
amiraseman 12:d4011389defe 389 if (button3Flag) {
amiraseman 12:d4011389defe 390 button3Flag = 0;
amiraseman 12:d4011389defe 391 timer.detach();
amiraseman 12:d4011389defe 392 break;
amiraseman 7:328dc986484f 393 }
amiraseman 7:328dc986484f 394 }
amiraseman 7:328dc986484f 395 }
amiraseman 7:328dc986484f 396
amiraseman 7:328dc986484f 397
amiraseman 8:8b810c29eb7b 398
amiraseman 15:c6f7c4768cf2 399 void loggerData() // gets the temp and pressure data and stores to suitable arrays (the arrays are used to plot the desired graphs)
amiraseman 8:8b810c29eb7b 400 {
amiraseman 15:c6f7c4768cf2 401 if(dataLoggerFlag ==1) {
amiraseman 17:99161153081d 402 int k ;
amiraseman 17:99161153081d 403 int sumTemperature = 0;
amiraseman 17:99161153081d 404 int sumPressure = 0;
amiraseman 17:99161153081d 405 minTemperature = arrayT[0]; // sets the min to the first value in the array
amiraseman 17:99161153081d 406 minPressure = arrayP[0];
amiraseman 17:99161153081d 407 maxTemperature = arrayT[0];
amiraseman 17:99161153081d 408 maxPressure = arrayP[0];
amiraseman 17:99161153081d 409 yellowLED = 1;
amiraseman 17:99161153081d 410 readData();
amiraseman 8:8b810c29eb7b 411
amiraseman 15:c6f7c4768cf2 412 dataLoggerFlag=0;
amiraseman 8:8b810c29eb7b 413 //write the data to the arrays (arrays used to plot graphs)
amiraseman 8:8b810c29eb7b 414 //read the data from sensor
amiraseman 15:c6f7c4768cf2 415
amiraseman 8:8b810c29eb7b 416 //Store the values in the array
amiraseman 15:c6f7c4768cf2 417 arrayT[i] = temperature;
amiraseman 15:c6f7c4768cf2 418 arrayP[i] = pressure/25 ;
amiraseman 15:c6f7c4768cf2 419
amiraseman 8:8b810c29eb7b 420
amiraseman 8:8b810c29eb7b 421 // calculate the average value of the arrays and save them to an integer
amiraseman 8:8b810c29eb7b 422
amiraseman 15:c6f7c4768cf2 423 for (k = 0 ; k<=i ; k++) { // loops through the arrays
amiraseman 15:c6f7c4768cf2 424
amiraseman 15:c6f7c4768cf2 425 sumTemperature += arrayT[k]; // calculates the sum of the stored values
amiraseman 15:c6f7c4768cf2 426 averageTemperature = sumTemperature/(k+1) ; //calculates the average value
amiraseman 8:8b810c29eb7b 427
amiraseman 15:c6f7c4768cf2 428 sumPressure += arrayP[k]; // calculates the sum of the stored values
amiraseman 18:374c452e19db 429 averagePressure =( 25*(sumPressure/(k+1))) ; //calculates the average value
amiraseman 15:c6f7c4768cf2 430
amiraseman 15:c6f7c4768cf2 431 if(arrayT[k]>maxTemperature) { // checks if any of the values in the array is bigger than the fist value
amiraseman 15:c6f7c4768cf2 432 maxTemperature=arrayT[k]; // if any greater values, sets the max value to that
amiraseman 8:8b810c29eb7b 433 }
amiraseman 15:c6f7c4768cf2 434 if(arrayT[k]<minTemperature) { // finds the smallest value of the array
amiraseman 15:c6f7c4768cf2 435 minTemperature=arrayT[k];
amiraseman 8:8b810c29eb7b 436 }
amiraseman 15:c6f7c4768cf2 437 if(arrayP[k]>maxPressure) { // checks if any of the values in the array is bigger than the fist value
amiraseman 18:374c452e19db 438 maxPressure=(25*arrayP[k]); // if any greater values, sets the max value to that
amiraseman 8:8b810c29eb7b 439 }
amiraseman 15:c6f7c4768cf2 440 if(arrayP[k]<maxPressure) {
amiraseman 18:374c452e19db 441 minPressure=(25*arrayP[k]);
amiraseman 8:8b810c29eb7b 442 }
amiraseman 8:8b810c29eb7b 443
amiraseman 8:8b810c29eb7b 444 }
amiraseman 18:374c452e19db 445
amiraseman 18:374c452e19db 446
amiraseman 15:c6f7c4768cf2 447 i++; // moves to the next cell in the array
amiraseman 8:8b810c29eb7b 448 if (i>83) {
amiraseman 8:8b810c29eb7b 449 lcd.clear();
amiraseman 8:8b810c29eb7b 450 i=0;
amiraseman 8:8b810c29eb7b 451 }
amiraseman 8:8b810c29eb7b 452 }
amiraseman 17:99161153081d 453 yellowLED = 0;
amiraseman 8:8b810c29eb7b 454 }
amiraseman 8:8b810c29eb7b 455
amiraseman 8:8b810c29eb7b 456
amiraseman 8:8b810c29eb7b 457
amiraseman 8:8b810c29eb7b 458
amiraseman 15:c6f7c4768cf2 459
amiraseman 8:8b810c29eb7b 460 void dataLogger() // shows a summery of data and the graphs
amiraseman 8:8b810c29eb7b 461 {
amiraseman 15:c6f7c4768cf2 462 int swipe = 1 ;
amiraseman 8:8b810c29eb7b 463 while (1) {
amiraseman 16:5ce95c8f4e89 464 wakeUp();
amiraseman 16:5ce95c8f4e89 465 updateTime();
amiraseman 15:c6f7c4768cf2 466 if (runLoggerFlag) {
amiraseman 15:c6f7c4768cf2 467
amiraseman 15:c6f7c4768cf2 468
amiraseman 15:c6f7c4768cf2 469 loggerData();
amiraseman 15:c6f7c4768cf2 470
amiraseman 15:c6f7c4768cf2 471 if (button4Flag) {
amiraseman 15:c6f7c4768cf2 472 button4Flag = 0 ;
amiraseman 15:c6f7c4768cf2 473 swipe ++;
amiraseman 15:c6f7c4768cf2 474 }
amiraseman 15:c6f7c4768cf2 475 if (swipe > 4) {
amiraseman 15:c6f7c4768cf2 476 swipe = 1;
amiraseman 15:c6f7c4768cf2 477 }
amiraseman 15:c6f7c4768cf2 478
amiraseman 15:c6f7c4768cf2 479 strncpy(buffer0, bufferTime, 14);
amiraseman 15:c6f7c4768cf2 480 int display5 = sprintf (buffer5, " Back Next");//convert integer to buffer str
amiraseman 8:8b810c29eb7b 481
amiraseman 15:c6f7c4768cf2 482 switch (swipe) {
amiraseman 15:c6f7c4768cf2 483 case 1: {
amiraseman 15:c6f7c4768cf2 484 int display1 = sprintf (buffer1, "Temperature");
amiraseman 15:c6f7c4768cf2 485 int display2 = sprintf (buffer2, "Min = %d", minTemperature);
amiraseman 15:c6f7c4768cf2 486 int display3 = sprintf (buffer3, "Max = %d", maxTemperature);
amiraseman 15:c6f7c4768cf2 487 int display4 = sprintf (buffer4, "Avg = %d", averageTemperature);
amiraseman 15:c6f7c4768cf2 488 display();
amiraseman 15:c6f7c4768cf2 489 break;
amiraseman 15:c6f7c4768cf2 490 }
amiraseman 15:c6f7c4768cf2 491 case 2 : {
amiraseman 15:c6f7c4768cf2 492 lcd.clear();
amiraseman 15:c6f7c4768cf2 493 lcd.printString(" Temperature",0,0);
amiraseman 15:c6f7c4768cf2 494 lcd.plotArray(arrayT);
amiraseman 15:c6f7c4768cf2 495 break;
amiraseman 15:c6f7c4768cf2 496 }
amiraseman 15:c6f7c4768cf2 497 case 3 : {
amiraseman 15:c6f7c4768cf2 498 int display11 = sprintf (buffer1, "Pressure");
amiraseman 15:c6f7c4768cf2 499 int display22 = sprintf (buffer2, "Min = %d", minPressure);
amiraseman 15:c6f7c4768cf2 500 int display33 = sprintf (buffer3, "Max = %d", maxPressure);
amiraseman 15:c6f7c4768cf2 501 int display44 = sprintf (buffer4, "Avg = %d", averagePressure);
amiraseman 15:c6f7c4768cf2 502 display();
amiraseman 15:c6f7c4768cf2 503 break;
amiraseman 15:c6f7c4768cf2 504 }
amiraseman 15:c6f7c4768cf2 505 case 4 : {
amiraseman 15:c6f7c4768cf2 506 lcd.clear();
amiraseman 15:c6f7c4768cf2 507 lcd.printString(" Pressure",0,0);
amiraseman 15:c6f7c4768cf2 508 lcd.plotArray(arrayP);
amiraseman 15:c6f7c4768cf2 509 break;
amiraseman 15:c6f7c4768cf2 510 }
amiraseman 15:c6f7c4768cf2 511 default :
amiraseman 15:c6f7c4768cf2 512 break;
amiraseman 15:c6f7c4768cf2 513 }
amiraseman 15:c6f7c4768cf2 514 } else {
amiraseman 15:c6f7c4768cf2 515 lcd.clear();
amiraseman 15:c6f7c4768cf2 516 lcd.printString(" To Turn On",0,1);
amiraseman 15:c6f7c4768cf2 517 lcd.printString(" Go To",0,2);
amiraseman 15:c6f7c4768cf2 518 lcd.printString(" Settings",0,3);
amiraseman 15:c6f7c4768cf2 519 lcd.printString ("Back",0,5);
amiraseman 15:c6f7c4768cf2 520
amiraseman 8:8b810c29eb7b 521 }
amiraseman 8:8b810c29eb7b 522
amiraseman 15:c6f7c4768cf2 523 if (button3Flag) {
amiraseman 15:c6f7c4768cf2 524 button3Flag=0;
amiraseman 15:c6f7c4768cf2 525 break;
amiraseman 8:8b810c29eb7b 526 }
amiraseman 8:8b810c29eb7b 527 }
amiraseman 8:8b810c29eb7b 528 }
amiraseman 8:8b810c29eb7b 529
amiraseman 18:374c452e19db 530
amiraseman 18:374c452e19db 531
amiraseman 18:374c452e19db 532
amiraseman 18:374c452e19db 533 void thresholdCheck()
amiraseman 17:99161153081d 534 {
amiraseman 18:374c452e19db 535 if (temperature == fsmH[0].output) { //if the current temp is less than the set threshold
amiraseman 18:374c452e19db 536 while (1) {
amiraseman 18:374c452e19db 537 redLED = 0 ;
amiraseman 18:374c452e19db 538 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 539 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 540 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 541 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 542 int display4 = sprintf (buffer4, "%0.1d!",temperature);
amiraseman 18:374c452e19db 543 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 544 display();
amiraseman 18:374c452e19db 545 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 546 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 547 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 548 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 549 redLED = 1 ;
amiraseman 18:374c452e19db 550 if (button3Flag) {
amiraseman 18:374c452e19db 551 buzzer = 0 ;
amiraseman 18:374c452e19db 552 button3Flag=0;
amiraseman 18:374c452e19db 553 goto exit ;
amiraseman 18:374c452e19db 554 }
amiraseman 18:374c452e19db 555 }
amiraseman 18:374c452e19db 556 }
amiraseman 18:374c452e19db 557 }
amiraseman 18:374c452e19db 558 if (temperature == fsmH[1].output) { //if the current temp is greater than the set threshold
amiraseman 18:374c452e19db 559 while (1) {
amiraseman 18:374c452e19db 560 redLED = 0 ;
amiraseman 18:374c452e19db 561 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 562 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 563 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 564 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 565 int display4 = sprintf (buffer4, "%0.1d!",temperature );
amiraseman 18:374c452e19db 566 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 567 display();
amiraseman 18:374c452e19db 568 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 569 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 570 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 571 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 572 redLED = 1 ;
amiraseman 18:374c452e19db 573 if (button3Flag) {
amiraseman 18:374c452e19db 574 buzzer = 0 ;
amiraseman 18:374c452e19db 575 button3Flag=0;
amiraseman 18:374c452e19db 576 goto exit ;
amiraseman 18:374c452e19db 577 }
amiraseman 18:374c452e19db 578 }
amiraseman 18:374c452e19db 579 }
amiraseman 18:374c452e19db 580 }
amiraseman 18:374c452e19db 581 if (pressure == fsmH[2].output) { //if the current pressure is less than the set threshold
amiraseman 18:374c452e19db 582 while (1) {
amiraseman 18:374c452e19db 583 redLED = 0 ;
amiraseman 18:374c452e19db 584 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 585 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 586 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 587 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 588 int display4 = sprintf (buffer4, "%0.1f!",pressure);
amiraseman 18:374c452e19db 589 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 590 display();
amiraseman 18:374c452e19db 591 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 592 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 593 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 594 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 595 redLED = 1 ;
amiraseman 18:374c452e19db 596 if (button3Flag) {
amiraseman 18:374c452e19db 597 buzzer = 0 ;
amiraseman 18:374c452e19db 598 button3Flag=0;
amiraseman 18:374c452e19db 599 goto exit ;
amiraseman 18:374c452e19db 600 }
amiraseman 18:374c452e19db 601 }
amiraseman 18:374c452e19db 602 }
amiraseman 18:374c452e19db 603 }
amiraseman 18:374c452e19db 604 if (pressure == fsmH[3].output) { //if the current pressure is greater than the set threshold
amiraseman 18:374c452e19db 605 while (1) {
amiraseman 18:374c452e19db 606 redLED = 0 ;
amiraseman 18:374c452e19db 607 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 608 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 609 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 610 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 611 int display4 = sprintf (buffer4, "%0.1f!",pressure);
amiraseman 18:374c452e19db 612 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 613 display();
amiraseman 18:374c452e19db 614 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 615 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 616 buzzer=1; // set duty cycle
amiraseman 18:374c452e19db 617 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 618 redLED = 1 ;
amiraseman 18:374c452e19db 619 if (button3Flag) {
amiraseman 18:374c452e19db 620 buzzer = 0 ;
amiraseman 18:374c452e19db 621 button3Flag=0;
amiraseman 18:374c452e19db 622 goto exit ;
amiraseman 18:374c452e19db 623 }
amiraseman 18:374c452e19db 624 }
amiraseman 18:374c452e19db 625 }
amiraseman 18:374c452e19db 626 }
amiraseman 18:374c452e19db 627 exit:
amiraseman 18:374c452e19db 628 redLED = 0 ;
amiraseman 18:374c452e19db 629
amiraseman 18:374c452e19db 630 }
amiraseman 18:374c452e19db 631
amiraseman 18:374c452e19db 632
amiraseman 18:374c452e19db 633 void threshold()
amiraseman 18:374c452e19db 634 {
amiraseman 18:374c452e19db 635 powerSaverCheck();
amiraseman 18:374c452e19db 636 state = 0;
amiraseman 18:374c452e19db 637 //sets the initial threshhold values to the values recieved from the sensor
amiraseman 18:374c452e19db 638 readData();
amiraseman 18:374c452e19db 639 fsmH[0].output = temperature;
amiraseman 18:374c452e19db 640 fsmH[1].output = temperature;
amiraseman 18:374c452e19db 641 fsmH[2].output = pressure;
amiraseman 18:374c452e19db 642 fsmH[3].output = pressure;
amiraseman 18:374c452e19db 643
amiraseman 17:99161153081d 644 while (1) {
amiraseman 18:374c452e19db 645
amiraseman 18:374c452e19db 646 wakeUp();
amiraseman 18:374c452e19db 647 updateTime();
amiraseman 18:374c452e19db 648 loggerData();
amiraseman 18:374c452e19db 649
amiraseman 18:374c452e19db 650
amiraseman 18:374c452e19db 651
amiraseman 18:374c452e19db 652 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 18:374c452e19db 653 int display1 = sprintf (buffer1, "");//convert integer to buffer str
amiraseman 18:374c452e19db 654 int display2 = sprintf (buffer2, "");//convert integer to buffer str
amiraseman 18:374c452e19db 655 int display3 = sprintf (buffer3, ">>%s %d", fsmH[state].title,fsmH[state].output);//convert integer to buffer str
amiraseman 18:374c452e19db 656 int display4 = sprintf (buffer4, "");//convert integer to buffer str
amiraseman 18:374c452e19db 657 int display5 = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 18:374c452e19db 658
amiraseman 18:374c452e19db 659
amiraseman 17:99161153081d 660 display();
amiraseman 18:374c452e19db 661
amiraseman 18:374c452e19db 662
amiraseman 18:374c452e19db 663
amiraseman 18:374c452e19db 664 if (button4Flag) {
amiraseman 18:374c452e19db 665 button4Flag= 0;
amiraseman 18:374c452e19db 666 fsmH[state].output ++;
amiraseman 18:374c452e19db 667 }
amiraseman 18:374c452e19db 668
amiraseman 18:374c452e19db 669
amiraseman 18:374c452e19db 670 //checks the limits of the values
amiraseman 18:374c452e19db 671 if (fsmH[0].output >(temperature*2)) { //min temperature
amiraseman 18:374c452e19db 672 fsmH[0].output = -(temperature*2) ;
amiraseman 18:374c452e19db 673 }
amiraseman 18:374c452e19db 674 if (fsmH[1].output>(temperature*2)) { // max temperature
amiraseman 18:374c452e19db 675 fsmH[1].output = -(temperature*2) ;
amiraseman 18:374c452e19db 676 }
amiraseman 18:374c452e19db 677 if (fsmH[2].output>(pressure*2)) { //min pressure
amiraseman 18:374c452e19db 678 fsmH[2].output = -(pressure*2) ;
amiraseman 18:374c452e19db 679 }
amiraseman 18:374c452e19db 680 if (fsmH[3].output>(pressure*2)) { //max pressure
amiraseman 18:374c452e19db 681 fsmH[3].output = -(pressure*2) ;
amiraseman 18:374c452e19db 682 }
amiraseman 18:374c452e19db 683
amiraseman 18:374c452e19db 684
amiraseman 18:374c452e19db 685 if (button3Flag) {
amiraseman 18:374c452e19db 686 button3Flag=0;
amiraseman 18:374c452e19db 687 while (1) {
amiraseman 18:374c452e19db 688 int display0 = sprintf (buffer0, "");
amiraseman 18:374c452e19db 689 int display1 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 690 int display2 = sprintf (buffer2, "Set Thresholds?");
amiraseman 18:374c452e19db 691 int display3 = sprintf (buffer3, ">>%s", fsmG[state].title); // yes or no (1 or 0 output)
amiraseman 18:374c452e19db 692 int display4 = sprintf (buffer4, "");
amiraseman 18:374c452e19db 693 int display5 = sprintf (buffer5, "");
amiraseman 18:374c452e19db 694 display();
amiraseman 18:374c452e19db 695 thresholdAlarmFlag = fsmG[state].output ; //yes or no (1 or 0)
amiraseman 18:374c452e19db 696 if (state>1) {
amiraseman 18:374c452e19db 697 state = 0;
amiraseman 18:374c452e19db 698 }
amiraseman 18:374c452e19db 699 if (state<0) {
amiraseman 18:374c452e19db 700 state = 1;
amiraseman 18:374c452e19db 701 }
amiraseman 18:374c452e19db 702 if (button3Flag) {
amiraseman 18:374c452e19db 703 button3Flag=0;
amiraseman 18:374c452e19db 704 serial.printf("thresholds flag :%i \n",fsmG[state].output);
amiraseman 18:374c452e19db 705 serial.printf("thresholds: mint%i maxt%i minP%i maxP %i \n",fsmH[0].output,fsmH[1].output,fsmH[2].output,fsmH[3].output);
amiraseman 18:374c452e19db 706 goto exit;
amiraseman 18:374c452e19db 707 }
amiraseman 18:374c452e19db 708 }
amiraseman 18:374c452e19db 709 }
amiraseman 18:374c452e19db 710 }
amiraseman 18:374c452e19db 711 exit:
amiraseman 18:374c452e19db 712 return;
amiraseman 18:374c452e19db 713 }
amiraseman 18:374c452e19db 714
amiraseman 18:374c452e19db 715
amiraseman 18:374c452e19db 716
amiraseman 18:374c452e19db 717
amiraseman 18:374c452e19db 718
amiraseman 18:374c452e19db 719
amiraseman 18:374c452e19db 720
amiraseman 18:374c452e19db 721 void alarmClockCheck()
amiraseman 18:374c452e19db 722 {
amiraseman 18:374c452e19db 723 if (currentTime == UNIXdate) { //if the current time is equal to the time set by user
amiraseman 18:374c452e19db 724 //serial.printf("Alarm clock flag is set\n");
amiraseman 18:374c452e19db 725 alarmClockFlag =0 ;
amiraseman 18:374c452e19db 726 while (1) {
amiraseman 18:374c452e19db 727 int display0 = sprintf (buffer0, "");
amiraseman 18:374c452e19db 728 int display1 = sprintf (buffer1, "Alarm !");
amiraseman 18:374c452e19db 729 strncpy(buffer2, bufferTime, 14);
amiraseman 18:374c452e19db 730 int display2 = sprintf (buffer3, "");
amiraseman 18:374c452e19db 731 int display4 = sprintf (buffer4, "");
amiraseman 18:374c452e19db 732 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 733 display();
amiraseman 18:374c452e19db 734 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 735 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 736 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 737 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 738 if (button3Flag) {
amiraseman 18:374c452e19db 739 buzzer = 0 ;
amiraseman 18:374c452e19db 740 break;
amiraseman 18:374c452e19db 741 }
amiraseman 18:374c452e19db 742 }
amiraseman 17:99161153081d 743 if (button3Flag) {
amiraseman 18:374c452e19db 744 button3Flag=0;
amiraseman 17:99161153081d 745 break;
amiraseman 17:99161153081d 746 }
amiraseman 18:374c452e19db 747
amiraseman 17:99161153081d 748 }
amiraseman 18:374c452e19db 749 }
amiraseman 18:374c452e19db 750 }
amiraseman 17:99161153081d 751
amiraseman 18:374c452e19db 752
amiraseman 17:99161153081d 753
amiraseman 17:99161153081d 754
amiraseman 17:99161153081d 755
amiraseman 17:99161153081d 756
amiraseman 17:99161153081d 757
amiraseman 17:99161153081d 758 void alarmClock ()
amiraseman 17:99161153081d 759 {
amiraseman 17:99161153081d 760 powerSaverCheck();
amiraseman 17:99161153081d 761 state = 0;
amiraseman 17:99161153081d 762 while (1) {
amiraseman 17:99161153081d 763
amiraseman 17:99161153081d 764 wakeUp();
amiraseman 17:99161153081d 765 updateTime();
amiraseman 17:99161153081d 766 loggerData();
amiraseman 17:99161153081d 767 stateminus1=fsmC[state].nextState[0];
amiraseman 17:99161153081d 768 stateminus2=fsmC[stateminus1].nextState[0];
amiraseman 17:99161153081d 769 stateplus1=fsmC[state].nextState[1];
amiraseman 17:99161153081d 770 stateplus2=fsmC[stateplus1].nextState[1];
amiraseman 17:99161153081d 771
amiraseman 17:99161153081d 772
amiraseman 17:99161153081d 773
amiraseman 17:99161153081d 774
amiraseman 17:99161153081d 775 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 17:99161153081d 776 int display1 = sprintf (buffer1, "%s %d", fsmC[stateminus2].title,fsmC[stateminus2].output);//convert integer to buffer str
amiraseman 17:99161153081d 777 int display2 = sprintf (buffer2, "%s %d", fsmC[stateminus1].title,fsmC[stateminus1].output);//convert integer to buffer str
amiraseman 17:99161153081d 778 int display3 = sprintf (buffer3, ">>%s %d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
amiraseman 17:99161153081d 779 int display4 = sprintf (buffer4, "%s %d", fsmC[stateplus1].title,fsmC[stateplus1].output);//convert integer to buffer str
amiraseman 17:99161153081d 780 int display5 = sprintf (buffer5, "%s %d", fsmC[stateplus2].title,fsmC[stateplus2].output);//convert integer to buffer str
amiraseman 17:99161153081d 781
amiraseman 17:99161153081d 782
amiraseman 17:99161153081d 783
amiraseman 17:99161153081d 784 display();
amiraseman 17:99161153081d 785
amiraseman 17:99161153081d 786
amiraseman 17:99161153081d 787
amiraseman 17:99161153081d 788 if (button4Flag) {
amiraseman 17:99161153081d 789 button4Flag= 0;
amiraseman 17:99161153081d 790 fsmC[state].output ++;
amiraseman 17:99161153081d 791 calculateUNIXTime();
amiraseman 17:99161153081d 792 }
amiraseman 17:99161153081d 793
amiraseman 17:99161153081d 794
amiraseman 17:99161153081d 795 //checks the limits of the values
amiraseman 17:99161153081d 796 if (fsmC[0].output >23) { //hour
amiraseman 17:99161153081d 797 fsmC[0].output = 0 ;
amiraseman 17:99161153081d 798 }
amiraseman 17:99161153081d 799 if (fsmC[1].output>59) { // minute
amiraseman 17:99161153081d 800 fsmC[1].output = 0 ;
amiraseman 17:99161153081d 801 }
amiraseman 17:99161153081d 802 if (fsmC[3].output>11) { //month
amiraseman 17:99161153081d 803 fsmC[3].output = 0 ;
amiraseman 17:99161153081d 804 }
amiraseman 17:99161153081d 805 if (fsmC[2].output>31) { //day
amiraseman 17:99161153081d 806 fsmC[2].output = 1 ;
amiraseman 17:99161153081d 807 }
amiraseman 17:99161153081d 808 if (fsmC[4].output>2030) { //year
amiraseman 17:99161153081d 809 fsmC[4].output = 2015 ;
amiraseman 17:99161153081d 810 }
amiraseman 17:99161153081d 811
amiraseman 17:99161153081d 812
amiraseman 17:99161153081d 813
amiraseman 17:99161153081d 814 if (button3Flag) {
amiraseman 17:99161153081d 815 button3Flag=0;
amiraseman 17:99161153081d 816 while (1) {
amiraseman 17:99161153081d 817 int display0 = sprintf (buffer0, "");
amiraseman 17:99161153081d 818 int display1 = sprintf (buffer1, "");
amiraseman 17:99161153081d 819 int display2 = sprintf (buffer2, "Set Alarm?");
amiraseman 17:99161153081d 820 int display3 = sprintf (buffer3, ">>%s", fsmG[state].title);
amiraseman 17:99161153081d 821 int display4 = sprintf (buffer4, "");
amiraseman 17:99161153081d 822 int display5 = sprintf (buffer5, "");
amiraseman 17:99161153081d 823 display();
amiraseman 18:374c452e19db 824 alarmClockFlag = fsmG[state].output ;
amiraseman 17:99161153081d 825 if (state>1) {
amiraseman 17:99161153081d 826 state = 0;
amiraseman 17:99161153081d 827 }
amiraseman 17:99161153081d 828 if (state<0) {
amiraseman 17:99161153081d 829 state = 1;
amiraseman 17:99161153081d 830 }
amiraseman 17:99161153081d 831 if (button3Flag) {
amiraseman 17:99161153081d 832 button3Flag=0;
amiraseman 17:99161153081d 833 goto exit;
amiraseman 17:99161153081d 834 }
amiraseman 17:99161153081d 835 }
amiraseman 17:99161153081d 836 }
amiraseman 17:99161153081d 837 }
amiraseman 17:99161153081d 838 exit:
amiraseman 17:99161153081d 839 return;
amiraseman 17:99161153081d 840 }
amiraseman 17:99161153081d 841
amiraseman 17:99161153081d 842
amiraseman 17:99161153081d 843
amiraseman 17:99161153081d 844
amiraseman 17:99161153081d 845
amiraseman 17:99161153081d 846 void alarmsMenu ()
amiraseman 17:99161153081d 847 {
amiraseman 17:99161153081d 848 state = 0 ;
amiraseman 17:99161153081d 849 powerSaverCheck();
amiraseman 17:99161153081d 850 while (1) {
amiraseman 17:99161153081d 851 wakeUp();
amiraseman 17:99161153081d 852 updateTime();
amiraseman 17:99161153081d 853 loggerData();
amiraseman 17:99161153081d 854 int display0 = sprintf (buffer0, " Back Next");
amiraseman 17:99161153081d 855 int display1 = sprintf (buffer1, "");
amiraseman 17:99161153081d 856 int display2 = sprintf (buffer2, "");
amiraseman 17:99161153081d 857 int display3 = sprintf (buffer3, ">>%s", fsmF[state].title);
amiraseman 17:99161153081d 858 int display4 = sprintf (buffer4, "");
amiraseman 17:99161153081d 859 int display5 = sprintf (buffer5, "");
amiraseman 17:99161153081d 860
amiraseman 17:99161153081d 861 display();
amiraseman 17:99161153081d 862
amiraseman 17:99161153081d 863
amiraseman 17:99161153081d 864
amiraseman 17:99161153081d 865 if (state > 1) {
amiraseman 17:99161153081d 866 state = 0 ;
amiraseman 17:99161153081d 867 }
amiraseman 17:99161153081d 868 if (state < 0) {
amiraseman 17:99161153081d 869 state = 1 ;
amiraseman 17:99161153081d 870 }
amiraseman 17:99161153081d 871 if (button3Flag) {
amiraseman 17:99161153081d 872 button3Flag=0;
amiraseman 17:99161153081d 873 state = 0;
amiraseman 17:99161153081d 874 break;
amiraseman 17:99161153081d 875 }
amiraseman 17:99161153081d 876 if (button4Flag) {
amiraseman 17:99161153081d 877 if (state == 0) { // temp and pressure thresholds
amiraseman 18:374c452e19db 878 threshold();
amiraseman 17:99161153081d 879
amiraseman 17:99161153081d 880 }
amiraseman 17:99161153081d 881 if (state == 1) {// alarm clock
amiraseman 17:99161153081d 882
amiraseman 17:99161153081d 883 alarmClock();
amiraseman 17:99161153081d 884 }
amiraseman 17:99161153081d 885 }
amiraseman 17:99161153081d 886 }
amiraseman 17:99161153081d 887 }
amiraseman 17:99161153081d 888
amiraseman 17:99161153081d 889
amiraseman 17:99161153081d 890
amiraseman 15:c6f7c4768cf2 891
amiraseman 7:328dc986484f 892 void dataLoggerSetting()
amiraseman 7:328dc986484f 893 {
amiraseman 15:c6f7c4768cf2 894 state = runLoggerFlag ; //inits the state to the saved flag by the user in the past
amiraseman 13:213bf5887930 895 powerSaverCheck();
amiraseman 13:213bf5887930 896 while (1) {
amiraseman 13:213bf5887930 897 wakeUp();
amiraseman 13:213bf5887930 898 updateTime();
amiraseman 15:c6f7c4768cf2 899 loggerData();
amiraseman 13:213bf5887930 900 int display0 = sprintf (buffer0, " Back Save");
amiraseman 14:f3eb0fb6ecd5 901 int display1 = sprintf (buffer1, "");
amiraseman 14:f3eb0fb6ecd5 902 int display2 = sprintf (buffer2, "Data Logger");
amiraseman 14:f3eb0fb6ecd5 903 int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
amiraseman 14:f3eb0fb6ecd5 904 if (state == 1) {
amiraseman 14:f3eb0fb6ecd5 905 int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
amiraseman 18:374c452e19db 906 } else { // if the power saver is off it doesnt show the time
amiraseman 14:f3eb0fb6ecd5 907 int display4 = sprintf (buffer4, "");
amiraseman 13:213bf5887930 908 }
amiraseman 14:f3eb0fb6ecd5 909 int dispaly5 = sprintf (buffer5, "");
amiraseman 8:8b810c29eb7b 910
amiraseman 8:8b810c29eb7b 911
amiraseman 13:213bf5887930 912 display();
amiraseman 7:328dc986484f 913
amiraseman 13:213bf5887930 914
amiraseman 7:328dc986484f 915
amiraseman 15:c6f7c4768cf2 916 runLoggerFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
amiraseman 14:f3eb0fb6ecd5 917 dataLoggerTime = fsmE[state].output; //sets the timer to to value of output from the fsm
amiraseman 18:374c452e19db 918 serial.printf("data logger Time = %i \n dataLoggerFlag = %i \n",dataLoggerTime , runLoggerFlag);
amiraseman 7:328dc986484f 919
amiraseman 14:f3eb0fb6ecd5 920 if (button4Flag) {
amiraseman 14:f3eb0fb6ecd5 921 button4Flag=0;
amiraseman 14:f3eb0fb6ecd5 922 fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
amiraseman 14:f3eb0fb6ecd5 923 }
amiraseman 14:f3eb0fb6ecd5 924 if (fsmE[state].output > 1800) {
amiraseman 14:f3eb0fb6ecd5 925 fsmE[state].output = 60 ;
amiraseman 7:328dc986484f 926 }
amiraseman 7:328dc986484f 927
amiraseman 14:f3eb0fb6ecd5 928 if (state > 1) {
amiraseman 14:f3eb0fb6ecd5 929 state = 0 ;
amiraseman 14:f3eb0fb6ecd5 930 }
amiraseman 14:f3eb0fb6ecd5 931
amiraseman 7:328dc986484f 932 if (button3Flag) {
amiraseman 15:c6f7c4768cf2 933 if (state == 1) { // if the data logger is swiched on
amiraseman 15:c6f7c4768cf2 934 dataLoggerTimer.attach(&dataLoggerTimerExpired, dataLoggerTime); // set the timer
amiraseman 15:c6f7c4768cf2 935 }
amiraseman 15:c6f7c4768cf2 936 if (state == 0) { // if the data logger is swiched off
amiraseman 15:c6f7c4768cf2 937 dataLoggerTimer.detach(); // detach the timer
amiraseman 15:c6f7c4768cf2 938 }
amiraseman 15:c6f7c4768cf2 939 dataLoggerFlag = 1;
amiraseman 7:328dc986484f 940 button3Flag=0;
amiraseman 17:99161153081d 941 state = 0;
amiraseman 7:328dc986484f 942 break;
amiraseman 7:328dc986484f 943 }
amiraseman 14:f3eb0fb6ecd5 944 wait (0.1);
amiraseman 7:328dc986484f 945 }
amiraseman 7:328dc986484f 946
amiraseman 7:328dc986484f 947 }
amiraseman 6:03f12eda070d 948
amiraseman 6:03f12eda070d 949
amiraseman 6:03f12eda070d 950
amiraseman 6:03f12eda070d 951
amiraseman 6:03f12eda070d 952
amiraseman 6:03f12eda070d 953
amiraseman 6:03f12eda070d 954
amiraseman 6:03f12eda070d 955
amiraseman 6:03f12eda070d 956
amiraseman 6:03f12eda070d 957
amiraseman 6:03f12eda070d 958
amiraseman 6:03f12eda070d 959
amiraseman 6:03f12eda070d 960 void powerSaverSetting()
amiraseman 6:03f12eda070d 961 {
amiraseman 13:213bf5887930 962 state = powerSaverFlag ; //inits the state to the saved flag by the user in the past
amiraseman 13:213bf5887930 963 powerSaverCheck();
amiraseman 6:03f12eda070d 964 while (1) {
amiraseman 6:03f12eda070d 965 wakeUp();
amiraseman 13:213bf5887930 966 updateTime();
amiraseman 15:c6f7c4768cf2 967 loggerData();
amiraseman 13:213bf5887930 968 int display0 = sprintf (buffer0, " Back Save");
amiraseman 13:213bf5887930 969 int display1 = sprintf (buffer1, "");
amiraseman 13:213bf5887930 970 int display2 = sprintf (buffer2, "Power Saver");
amiraseman 13:213bf5887930 971 int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
amiraseman 13:213bf5887930 972 if (state == 1) {
amiraseman 13:213bf5887930 973 int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
amiraseman 13:213bf5887930 974 } else { // if the power saver is off it dowsnt show the time
amiraseman 13:213bf5887930 975 int display4 = sprintf (buffer4, "");
amiraseman 6:03f12eda070d 976 }
amiraseman 13:213bf5887930 977 int dispaly5 = sprintf (buffer5, "");
amiraseman 13:213bf5887930 978
amiraseman 13:213bf5887930 979
amiraseman 13:213bf5887930 980 display();
amiraseman 13:213bf5887930 981
amiraseman 6:03f12eda070d 982
amiraseman 6:03f12eda070d 983
amiraseman 13:213bf5887930 984 powerSaverFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
amiraseman 13:213bf5887930 985 powerSaverTime = fsmE[state].output; //sets the timer to to value of output from the fsm
amiraseman 13:213bf5887930 986 serial.printf("Power Saver Time = %i \n powerSaverFlag = %i \n",powerSaverTime , powerSaverFlag);
amiraseman 6:03f12eda070d 987
amiraseman 13:213bf5887930 988 if (button4Flag) {
amiraseman 13:213bf5887930 989 button4Flag=0;
amiraseman 13:213bf5887930 990 fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
amiraseman 13:213bf5887930 991 }
amiraseman 13:213bf5887930 992 if (fsmE[state].output > 600) {
amiraseman 13:213bf5887930 993 fsmE[state].output = 60 ;
amiraseman 6:03f12eda070d 994 }
amiraseman 6:03f12eda070d 995
amiraseman 13:213bf5887930 996 if (state > 1) {
amiraseman 13:213bf5887930 997 state = 0 ;
amiraseman 13:213bf5887930 998 }
amiraseman 13:213bf5887930 999
amiraseman 6:03f12eda070d 1000 if (button3Flag) {
amiraseman 6:03f12eda070d 1001 button3Flag=0;
amiraseman 13:213bf5887930 1002 powerSaverCheck();
amiraseman 17:99161153081d 1003 state = 0;
amiraseman 6:03f12eda070d 1004 break;
amiraseman 6:03f12eda070d 1005 }
amiraseman 13:213bf5887930 1006 wait (0.1);
amiraseman 6:03f12eda070d 1007 }
amiraseman 6:03f12eda070d 1008 }
amiraseman 6:03f12eda070d 1009
amiraseman 6:03f12eda070d 1010
amiraseman 6:03f12eda070d 1011
amiraseman 6:03f12eda070d 1012
amiraseman 6:03f12eda070d 1013
amiraseman 6:03f12eda070d 1014
amiraseman 6:03f12eda070d 1015
amiraseman 6:03f12eda070d 1016
amiraseman 4:783276521952 1017 void calculateUNIXTime()
amiraseman 4:783276521952 1018 {
amiraseman 4:783276521952 1019 time_t rawtime;
amiraseman 4:783276521952 1020 struct tm * timeinfo;
amiraseman 4:783276521952 1021
amiraseman 17:99161153081d 1022 // get current timeinfo
amiraseman 17:99161153081d 1023 time ( &rawtime );
amiraseman 17:99161153081d 1024 // convert to struct
amiraseman 4:783276521952 1025 timeinfo = localtime ( &rawtime );
amiraseman 17:99161153081d 1026 // now modify the timeinfo to the given date
amiraseman 12:d4011389defe 1027 timeinfo->tm_year = (fsmC[4].output) - 1900;
amiraseman 12:d4011389defe 1028 timeinfo->tm_mon = (fsmC[3].output) - 1; //months since January - [0,11]
amiraseman 12:d4011389defe 1029 timeinfo->tm_mday = (fsmC[2].output) ; //day of the month - [1,31]
amiraseman 12:d4011389defe 1030 timeinfo->tm_hour = (fsmC[0].output) ; //hours since midnight - [0,23]
amiraseman 12:d4011389defe 1031 timeinfo->tm_min = (fsmC[1].output) ; //minutes after the hour - [0,59]
amiraseman 12:d4011389defe 1032 timeinfo->tm_sec = 0 ; //seconds after the minute - [0,59]
amiraseman 4:783276521952 1033
amiraseman 17:99161153081d 1034 //call mktime to create unix time stamp from timeinfo struct
amiraseman 4:783276521952 1035 UNIXdate = mktime ( timeinfo );
amiraseman 4:783276521952 1036
amiraseman 4:783276521952 1037 }
amiraseman 4:783276521952 1038
amiraseman 5:6952998ab446 1039
amiraseman 13:213bf5887930 1040 void notificationSetting ()
amiraseman 4:783276521952 1041 {
amiraseman 4:783276521952 1042 while(1) {
amiraseman 6:03f12eda070d 1043 wakeUp();
amiraseman 12:d4011389defe 1044 powerSaverCheck();
amiraseman 17:99161153081d 1045 loggerData();
amiraseman 5:6952998ab446 1046
amiraseman 5:6952998ab446 1047
amiraseman 5:6952998ab446 1048 if (button4Flag) {
amiraseman 5:6952998ab446 1049 button4Flag=0;
amiraseman 12:d4011389defe 1050
amiraseman 5:6952998ab446 1051 }
amiraseman 5:6952998ab446 1052
amiraseman 4:783276521952 1053 if (button3Flag) {
amiraseman 4:783276521952 1054 button3Flag=0;
amiraseman 17:99161153081d 1055 state = 0;
amiraseman 4:783276521952 1056 break;
amiraseman 4:783276521952 1057 }
amiraseman 4:783276521952 1058 }
amiraseman 0:d78ac68077c6 1059 }
amiraseman 0:d78ac68077c6 1060
amiraseman 0:d78ac68077c6 1061
amiraseman 2:1d7ef0f49b35 1062
amiraseman 12:d4011389defe 1063 void unitsSetting()
amiraseman 3:8a559b949470 1064 {
amiraseman 12:d4011389defe 1065 state = 0;
amiraseman 13:213bf5887930 1066 powerSaverCheck();
amiraseman 11:a78e01c9f054 1067 while (1) {
amiraseman 12:d4011389defe 1068 wakeUp();
amiraseman 12:d4011389defe 1069 updateTime();
amiraseman 17:99161153081d 1070 loggerData();
amiraseman 12:d4011389defe 1071 stateminus1=fsmD[state].nextState[0];
amiraseman 12:d4011389defe 1072 stateminus2=fsmD[stateminus1].nextState[0];
amiraseman 12:d4011389defe 1073 stateplus1=fsmD[state].nextState[1];
amiraseman 12:d4011389defe 1074 stateplus2=fsmD[stateplus1].nextState[1];
amiraseman 12:d4011389defe 1075
amiraseman 3:8a559b949470 1076
amiraseman 4:783276521952 1077
amiraseman 3:8a559b949470 1078
amiraseman 12:d4011389defe 1079 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 12:d4011389defe 1080 int display1 = sprintf (buffer1, "%s", fsmD[stateminus2].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1081 int display2 = sprintf (buffer2, "%s", fsmD[stateminus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1082 int display3 = sprintf (buffer3, ">>%s", fsmD[state].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1083 int display4 = sprintf (buffer4, "%s", fsmD[stateplus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1084 int dispaly5 = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 12:d4011389defe 1085
amiraseman 12:d4011389defe 1086
amiraseman 12:d4011389defe 1087 unitFlag = fsmD[state].output;
amiraseman 12:d4011389defe 1088
amiraseman 12:d4011389defe 1089 display();
amiraseman 12:d4011389defe 1090
amiraseman 12:d4011389defe 1091 if (button3Flag) {
amiraseman 12:d4011389defe 1092 button3Flag=0;
amiraseman 17:99161153081d 1093 state = 0;
amiraseman 12:d4011389defe 1094 break;
amiraseman 12:d4011389defe 1095 }
amiraseman 12:d4011389defe 1096
amiraseman 12:d4011389defe 1097 wait (0.1);
amiraseman 12:d4011389defe 1098 }
amiraseman 12:d4011389defe 1099 }
amiraseman 12:d4011389defe 1100
amiraseman 12:d4011389defe 1101
amiraseman 12:d4011389defe 1102
amiraseman 12:d4011389defe 1103
amiraseman 12:d4011389defe 1104
amiraseman 12:d4011389defe 1105
amiraseman 12:d4011389defe 1106
amiraseman 12:d4011389defe 1107 void timeDateSetting()
amiraseman 12:d4011389defe 1108 {
amiraseman 13:213bf5887930 1109 powerSaverCheck();
amiraseman 12:d4011389defe 1110 state = 0;
amiraseman 12:d4011389defe 1111 while (1) {
amiraseman 11:a78e01c9f054 1112 wakeUp();
amiraseman 11:a78e01c9f054 1113 updateTime();
amiraseman 17:99161153081d 1114 loggerData();
amiraseman 12:d4011389defe 1115 stateminus1=fsmC[state].nextState[0];
amiraseman 12:d4011389defe 1116 stateminus2=fsmC[stateminus1].nextState[0];
amiraseman 12:d4011389defe 1117 stateplus1=fsmC[state].nextState[1];
amiraseman 12:d4011389defe 1118 stateplus2=fsmC[stateplus1].nextState[1];
amiraseman 12:d4011389defe 1119
amiraseman 12:d4011389defe 1120
amiraseman 12:d4011389defe 1121
amiraseman 12:d4011389defe 1122
amiraseman 12:d4011389defe 1123 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 12:d4011389defe 1124 int display1 = sprintf (buffer1, "%s %d", fsmC[stateminus2].title,fsmC[stateminus2].output);//convert integer to buffer str
amiraseman 12:d4011389defe 1125 int display2 = sprintf (buffer2, "%s %d", fsmC[stateminus1].title,fsmC[stateminus1].output);//convert integer to buffer str
amiraseman 12:d4011389defe 1126 int display3 = sprintf (buffer3, ">>%s %d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
amiraseman 12:d4011389defe 1127 int display4 = sprintf (buffer4, "%s %d", fsmC[stateplus1].title,fsmC[stateplus1].output);//convert integer to buffer str
amiraseman 12:d4011389defe 1128 int display5 = sprintf (buffer5, "%s %d", fsmC[stateplus2].title,fsmC[stateplus2].output);//convert integer to buffer str
amiraseman 12:d4011389defe 1129
amiraseman 12:d4011389defe 1130
amiraseman 11:a78e01c9f054 1131
amiraseman 11:a78e01c9f054 1132 display();
amiraseman 3:8a559b949470 1133
amiraseman 4:783276521952 1134
amiraseman 11:a78e01c9f054 1135
amiraseman 12:d4011389defe 1136 if (button4Flag) {
amiraseman 12:d4011389defe 1137 button4Flag= 0;
amiraseman 13:213bf5887930 1138 fsmC[state].output ++;
amiraseman 12:d4011389defe 1139 calculateUNIXTime();
amiraseman 12:d4011389defe 1140 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 12:d4011389defe 1141 }
amiraseman 11:a78e01c9f054 1142
amiraseman 11:a78e01c9f054 1143
amiraseman 12:d4011389defe 1144 //checks the limits of the values
amiraseman 12:d4011389defe 1145 if (fsmC[0].output >23) { //hour
amiraseman 12:d4011389defe 1146 fsmC[0].output = 0 ;
amiraseman 12:d4011389defe 1147 }
amiraseman 12:d4011389defe 1148 if (fsmC[1].output>59) { // minute
amiraseman 12:d4011389defe 1149 fsmC[1].output = 0 ;
amiraseman 12:d4011389defe 1150 }
amiraseman 12:d4011389defe 1151 if (fsmC[3].output>11) { //month
amiraseman 12:d4011389defe 1152 fsmC[3].output = 0 ;
amiraseman 12:d4011389defe 1153 }
amiraseman 12:d4011389defe 1154 if (fsmC[2].output>31) { //day
amiraseman 12:d4011389defe 1155 fsmC[2].output = 1 ;
amiraseman 12:d4011389defe 1156 }
amiraseman 12:d4011389defe 1157 if (fsmC[4].output>2030) { //year
amiraseman 12:d4011389defe 1158 fsmC[4].output = 2015 ;
amiraseman 12:d4011389defe 1159 }
amiraseman 11:a78e01c9f054 1160
amiraseman 11:a78e01c9f054 1161
amiraseman 12:d4011389defe 1162
amiraseman 11:a78e01c9f054 1163 if (button3Flag) {
amiraseman 11:a78e01c9f054 1164 button3Flag=0;
amiraseman 17:99161153081d 1165 state = 0;
amiraseman 11:a78e01c9f054 1166 break;
amiraseman 11:a78e01c9f054 1167 }
amiraseman 5:6952998ab446 1168 wait (0.1);
amiraseman 3:8a559b949470 1169 }
amiraseman 3:8a559b949470 1170 }
amiraseman 3:8a559b949470 1171
amiraseman 3:8a559b949470 1172
amiraseman 3:8a559b949470 1173
amiraseman 2:1d7ef0f49b35 1174
amiraseman 2:1d7ef0f49b35 1175 void settingsMenu()
amiraseman 2:1d7ef0f49b35 1176 {
amiraseman 12:d4011389defe 1177 state = 0;
amiraseman 13:213bf5887930 1178 powerSaverCheck();
amiraseman 11:a78e01c9f054 1179 while(1) {
amiraseman 12:d4011389defe 1180
amiraseman 11:a78e01c9f054 1181 stateminus1=fsmB[state].nextState[0];
amiraseman 11:a78e01c9f054 1182 stateminus2=fsmB[stateminus1].nextState[0];
amiraseman 11:a78e01c9f054 1183 stateplus1=fsmB[state].nextState[1];
amiraseman 11:a78e01c9f054 1184 stateplus2=fsmB[stateplus1].nextState[1];
amiraseman 6:03f12eda070d 1185
amiraseman 6:03f12eda070d 1186
amiraseman 6:03f12eda070d 1187 wakeUp();
amiraseman 3:8a559b949470 1188 updateTime();
amiraseman 15:c6f7c4768cf2 1189 loggerData();
amiraseman 11:a78e01c9f054 1190 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 1191 int dispaly = sprintf (buffer1, "%s", fsmB[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1192 int dispaly1 = sprintf (buffer2, "%s", fsmB[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1193 int dispaly2 = sprintf (buffer3, ">>%s", fsmB[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1194 int dispaly3 = sprintf (buffer4, "%s", fsmB[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1195 int dispaly4 = sprintf (buffer5, "%s", fsmB[stateplus2].title);//convert integer to buffer str
amiraseman 9:d1691d971f63 1196
amiraseman 9:d1691d971f63 1197 display();
amiraseman 9:d1691d971f63 1198
amiraseman 9:d1691d971f63 1199
amiraseman 10:7c976b5a5e25 1200 switch (state) {
amiraseman 11:a78e01c9f054 1201 case 0:
amiraseman 4:783276521952 1202 if (button4Flag) {
amiraseman 4:783276521952 1203 button4Flag=0;
amiraseman 4:783276521952 1204 timeDateSetting();
amiraseman 4:783276521952 1205 }
amiraseman 4:783276521952 1206
amiraseman 4:783276521952 1207
amiraseman 2:1d7ef0f49b35 1208 break;
amiraseman 11:a78e01c9f054 1209 case 1:
amiraseman 9:d1691d971f63 1210
amiraseman 5:6952998ab446 1211
amiraseman 5:6952998ab446 1212 if (button4Flag) {
amiraseman 5:6952998ab446 1213 button4Flag=0;
amiraseman 5:6952998ab446 1214 unitsSetting();
amiraseman 5:6952998ab446 1215 }
amiraseman 5:6952998ab446 1216
amiraseman 2:1d7ef0f49b35 1217 break;
amiraseman 11:a78e01c9f054 1218 case 2:
amiraseman 9:d1691d971f63 1219
amiraseman 4:783276521952 1220 if (button4Flag) {
amiraseman 4:783276521952 1221 button4Flag = 0;
amiraseman 13:213bf5887930 1222 notificationSetting();
amiraseman 4:783276521952 1223 }
amiraseman 2:1d7ef0f49b35 1224 break;
amiraseman 11:a78e01c9f054 1225 case 3:
amiraseman 6:03f12eda070d 1226 if (button4Flag) {
amiraseman 6:03f12eda070d 1227 button4Flag = 0;
amiraseman 6:03f12eda070d 1228 powerSaverSetting();
amiraseman 6:03f12eda070d 1229 }
amiraseman 2:1d7ef0f49b35 1230 break;
amiraseman 11:a78e01c9f054 1231 case 4:
amiraseman 7:328dc986484f 1232 if (button4Flag) {
amiraseman 7:328dc986484f 1233 button4Flag = 0;
amiraseman 7:328dc986484f 1234 dataLoggerSetting();
amiraseman 7:328dc986484f 1235 }
amiraseman 2:1d7ef0f49b35 1236 break;
amiraseman 2:1d7ef0f49b35 1237 default:
amiraseman 2:1d7ef0f49b35 1238 break;
amiraseman 2:1d7ef0f49b35 1239 }
amiraseman 4:783276521952 1240 if (button3Flag) {
amiraseman 2:1d7ef0f49b35 1241 button3Flag=0;
amiraseman 17:99161153081d 1242 state = 0;
amiraseman 2:1d7ef0f49b35 1243 break;
amiraseman 4:783276521952 1244 }
amiraseman 5:6952998ab446 1245 wait (0.1);
amiraseman 2:1d7ef0f49b35 1246 }
amiraseman 2:1d7ef0f49b35 1247 }
amiraseman 2:1d7ef0f49b35 1248
amiraseman 2:1d7ef0f49b35 1249
amiraseman 5:6952998ab446 1250 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 1251 {
amiraseman 13:213bf5887930 1252 wakeUp();
amiraseman 9:d1691d971f63 1253
amiraseman 12:d4011389defe 1254 stateminus1=fsmA[state].nextState[1];
amiraseman 12:d4011389defe 1255 stateminus2=fsmA[stateminus1].nextState[1];
amiraseman 12:d4011389defe 1256 stateplus1=fsmA[state].nextState[0];
amiraseman 12:d4011389defe 1257 stateplus2=fsmA[stateplus1].nextState[0];
amiraseman 9:d1691d971f63 1258
amiraseman 8:8b810c29eb7b 1259
amiraseman 11:a78e01c9f054 1260 strncpy(buffer0, bufferTime, 14);
amiraseman 10:7c976b5a5e25 1261 int dispaly = sprintf (buffer1, "%s", fsmA[stateminus2].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1262 int dispaly1 = sprintf (buffer2, "%s", fsmA[stateminus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1263 int dispaly2 = sprintf (buffer3, ">>%s", fsmA[state].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1264 int dispaly3 = sprintf (buffer4, "%s", fsmA[stateplus1].title);//convert integer to buffer str
amiraseman 10:7c976b5a5e25 1265 int dispaly4 = sprintf (buffer5, "%s", fsmA[stateplus2].title);//convert integer to buffer str
amiraseman 1:e60b9f116d38 1266
amiraseman 9:d1691d971f63 1267
amiraseman 9:d1691d971f63 1268
amiraseman 10:7c976b5a5e25 1269 switch (state) {
amiraseman 9:d1691d971f63 1270 case 0:
amiraseman 4:783276521952 1271 if (button4Flag) {
amiraseman 4:783276521952 1272 button4Flag=0;
amiraseman 12:d4011389defe 1273 timerFlag=1;
amiraseman 8:8b810c29eb7b 1274 timer.attach(&timerExpired,1.0);
amiraseman 12:d4011389defe 1275 liveData();
amiraseman 4:783276521952 1276 }
amiraseman 1:e60b9f116d38 1277 break;
amiraseman 9:d1691d971f63 1278 case 1:
amiraseman 8:8b810c29eb7b 1279 if (button4Flag) {
amiraseman 8:8b810c29eb7b 1280 button4Flag=0;
amiraseman 8:8b810c29eb7b 1281 dataLogger();
amiraseman 8:8b810c29eb7b 1282 }
amiraseman 1:e60b9f116d38 1283 break;
amiraseman 9:d1691d971f63 1284 case 2:
amiraseman 9:d1691d971f63 1285 break;
amiraseman 1:e60b9f116d38 1286 case 3:
amiraseman 17:99161153081d 1287 if (button4Flag) {
amiraseman 17:99161153081d 1288 button4Flag=0;
amiraseman 17:99161153081d 1289 alarmsMenu();
amiraseman 17:99161153081d 1290 }
amiraseman 1:e60b9f116d38 1291 break;
amiraseman 1:e60b9f116d38 1292 case 4:
amiraseman 2:1d7ef0f49b35 1293 if (button4Flag) {
amiraseman 2:1d7ef0f49b35 1294 button4Flag=0;
amiraseman 2:1d7ef0f49b35 1295 settingsMenu();
amiraseman 2:1d7ef0f49b35 1296 }
amiraseman 1:e60b9f116d38 1297 break;
amiraseman 1:e60b9f116d38 1298 default:
amiraseman 1:e60b9f116d38 1299 break;
amiraseman 1:e60b9f116d38 1300 }
amiraseman 1:e60b9f116d38 1301 }
amiraseman 1:e60b9f116d38 1302
amiraseman 1:e60b9f116d38 1303
amiraseman 1:e60b9f116d38 1304
amiraseman 2:1d7ef0f49b35 1305
amiraseman 0:d78ac68077c6 1306 int main()
amiraseman 0:d78ac68077c6 1307 {
amiraseman 0:d78ac68077c6 1308
amiraseman 0:d78ac68077c6 1309 // initiliase barometer
amiraseman 0:d78ac68077c6 1310 bmp180.init();
amiraseman 0:d78ac68077c6 1311 lcd.init();
amiraseman 1:e60b9f116d38 1312 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 1313 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 2:1d7ef0f49b35 1314 button3.rise(&button3Pressed);
amiraseman 2:1d7ef0f49b35 1315 button4.rise(&button4Pressed);
amiraseman 8:8b810c29eb7b 1316 dataLoggerTimer.attach(&dataLoggerTimerExpired , dataLoggerTime);
amiraseman 17:99161153081d 1317 //set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 17:99161153081d 1318 redLED.period_us(25);// Set frequency at 40kHz
amiraseman 17:99161153081d 1319 yellowLED.period_us(25);// Set frequency at 40kHz
amiraseman 17:99161153081d 1320 greenLED.period_us(25);// Set frequency at 40kHz
amiraseman 13:213bf5887930 1321 powerSaverCheck();
amiraseman 6:03f12eda070d 1322
amiraseman 0:d78ac68077c6 1323 while(1) {
amiraseman 3:8a559b949470 1324 updateTime();
amiraseman 15:c6f7c4768cf2 1325 loggerData();
amiraseman 1:e60b9f116d38 1326 startMenu();
amiraseman 9:d1691d971f63 1327 display();
amiraseman 4:783276521952 1328 wait (0.1);
amiraseman 0:d78ac68077c6 1329 }
amiraseman 0:d78ac68077c6 1330 }
amiraseman 0:d78ac68077c6 1331
amiraseman 0:d78ac68077c6 1332
amiraseman 0:d78ac68077c6 1333