Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Fri May 01 06:19:20 2015 +0000
Revision:
19:61eaa5235ccf
Parent:
18:374c452e19db
Child:
20:ec528f0e63c5
beginning of the day commit;

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 19:61eaa5235ccf 121 {3,"Power Saver",{4,2}},
amiraseman 19:61eaa5235ccf 122 {4,"Data 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 19:61eaa5235ccf 236 strftime(bufferTime, 14 , "%H:%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 19:61eaa5235ccf 304 void writeToFile(char *data,char *data1)
amiraseman 19:61eaa5235ccf 305 {
amiraseman 19:61eaa5235ccf 306 FILE* pFile = fopen("/local/textfile.txt","w"); // open file access
amiraseman 19:61eaa5235ccf 307
amiraseman 19:61eaa5235ccf 308 fprintf (pFile, "%s%s" , data,data1);
amiraseman 19:61eaa5235ccf 309 fclose (pFile);
amiraseman 19:61eaa5235ccf 310 }
amiraseman 19:61eaa5235ccf 311
amiraseman 19:61eaa5235ccf 312
amiraseman 19:61eaa5235ccf 313
amiraseman 19:61eaa5235ccf 314
amiraseman 15:c6f7c4768cf2 315 void wakeUp () //Turns the LCD on after the mbed is interrupted
amiraseman 15:c6f7c4768cf2 316 {
amiraseman 15:c6f7c4768cf2 317
amiraseman 15:c6f7c4768cf2 318
amiraseman 15:c6f7c4768cf2 319 if (lcdPowerFlag == 0) {// if the LCD is powered off
amiraseman 15:c6f7c4768cf2 320 serial.printf("lcd is off\n");
amiraseman 15:c6f7c4768cf2 321
amiraseman 15:c6f7c4768cf2 322 if (button1Flag || button2Flag || button3Flag || button4Flag) { // if any of the buttons are pressed
amiraseman 15:c6f7c4768cf2 323
amiraseman 15:c6f7c4768cf2 324 serial.printf("one of the buttons are pressed to turn on the lcd\n");
amiraseman 15:c6f7c4768cf2 325 lcdPowerFlag = 1 ; // sets the status of the lcd to powered on
amiraseman 18:374c452e19db 326 //serial.printf("lcd is on\n");
amiraseman 15:c6f7c4768cf2 327 lcd.init(); // turns the LCD on
amiraseman 15:c6f7c4768cf2 328 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 15:c6f7c4768cf2 329 button1Flag = 0 ;
amiraseman 15:c6f7c4768cf2 330 button2Flag = 0 ;
amiraseman 15:c6f7c4768cf2 331 button3Flag = 0 ;
amiraseman 15:c6f7c4768cf2 332 button4Flag = 0 ;
amiraseman 15:c6f7c4768cf2 333
amiraseman 15:c6f7c4768cf2 334 }
amiraseman 15:c6f7c4768cf2 335 }
amiraseman 15:c6f7c4768cf2 336
amiraseman 15:c6f7c4768cf2 337 }
amiraseman 0:d78ac68077c6 338
amiraseman 1:e60b9f116d38 339
amiraseman 1:e60b9f116d38 340
amiraseman 6:03f12eda070d 341
amiraseman 6:03f12eda070d 342
amiraseman 6:03f12eda070d 343 void savePower() // turns off the LCD to save power
amiraseman 6:03f12eda070d 344 {
amiraseman 13:213bf5887930 345 serial.printf("starts saving power\n");
amiraseman 6:03f12eda070d 346 lcd.turnOff () ; //turns off the lcd
amiraseman 13:213bf5887930 347 lcdPowerFlag = 0 ; // A flag is set to indicate the state of the LCD (is switched off)
amiraseman 13:213bf5887930 348 serial.printf("LCD is off\n");
amiraseman 13:213bf5887930 349
amiraseman 6:03f12eda070d 350 }
amiraseman 6:03f12eda070d 351
amiraseman 6:03f12eda070d 352
amiraseman 6:03f12eda070d 353
amiraseman 6:03f12eda070d 354
amiraseman 6:03f12eda070d 355
amiraseman 6:03f12eda070d 356
amiraseman 7:328dc986484f 357
amiraseman 7:328dc986484f 358 void powerSaverCheck() // checks if the powersaverFlag is set
amiraseman 7:328dc986484f 359 {
amiraseman 7:328dc986484f 360
amiraseman 13:213bf5887930 361 if (powerSaverFlag) {
amiraseman 7:328dc986484f 362
amiraseman 13:213bf5887930 363 serial.printf("Timeout attached\n");
amiraseman 7:328dc986484f 364 powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
amiraseman 7:328dc986484f 365
amiraseman 7:328dc986484f 366 }
amiraseman 7:328dc986484f 367
amiraseman 7:328dc986484f 368 else {
amiraseman 13:213bf5887930 369 serial.printf("lcd is on\n");
amiraseman 7:328dc986484f 370 powerSaverTimeout.detach();
amiraseman 13:213bf5887930 371 serial.printf("Timeout detached\n");
amiraseman 7:328dc986484f 372
amiraseman 7:328dc986484f 373 }
amiraseman 7:328dc986484f 374 }
amiraseman 7:328dc986484f 375
amiraseman 7:328dc986484f 376
amiraseman 7:328dc986484f 377
amiraseman 6:03f12eda070d 378
amiraseman 12:d4011389defe 379 void liveData() //
amiraseman 7:328dc986484f 380 {
amiraseman 13:213bf5887930 381 powerSaverCheck();
amiraseman 12:d4011389defe 382 while (1) {
amiraseman 15:c6f7c4768cf2 383 updateTime();
amiraseman 12:d4011389defe 384 wakeUp();
amiraseman 17:99161153081d 385 loggerData();
amiraseman 12:d4011389defe 386 if (timerFlag) {
amiraseman 17:99161153081d 387
amiraseman 17:99161153081d 388 yellowLED = 1;
amiraseman 12:d4011389defe 389 timerFlag=0;
amiraseman 7:328dc986484f 390 readData();
amiraseman 12:d4011389defe 391 strncpy(buffer1, bufferTime, 14);
amiraseman 12:d4011389defe 392 strncpy(buffer2, bufferDate, 14);
amiraseman 12:d4011389defe 393 strncpy(buffer3, bufferT, 14);
amiraseman 12:d4011389defe 394 strncpy(buffer4, bufferP, 14);
amiraseman 12:d4011389defe 395 int dispaly = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 12:d4011389defe 396 int dispaly1 = sprintf (buffer0, "");//convert integer to buffer str
amiraseman 12:d4011389defe 397 display();
amiraseman 12:d4011389defe 398 }
amiraseman 17:99161153081d 399 yellowLED = 0;
amiraseman 12:d4011389defe 400 if (button3Flag) {
amiraseman 12:d4011389defe 401 button3Flag = 0;
amiraseman 12:d4011389defe 402 timer.detach();
amiraseman 12:d4011389defe 403 break;
amiraseman 7:328dc986484f 404 }
amiraseman 7:328dc986484f 405 }
amiraseman 7:328dc986484f 406 }
amiraseman 7:328dc986484f 407
amiraseman 7:328dc986484f 408
amiraseman 8:8b810c29eb7b 409
amiraseman 15:c6f7c4768cf2 410 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 411 {
amiraseman 15:c6f7c4768cf2 412 if(dataLoggerFlag ==1) {
amiraseman 17:99161153081d 413 int k ;
amiraseman 17:99161153081d 414 int sumTemperature = 0;
amiraseman 17:99161153081d 415 int sumPressure = 0;
amiraseman 17:99161153081d 416 minTemperature = arrayT[0]; // sets the min to the first value in the array
amiraseman 17:99161153081d 417 minPressure = arrayP[0];
amiraseman 17:99161153081d 418 maxTemperature = arrayT[0];
amiraseman 17:99161153081d 419 maxPressure = arrayP[0];
amiraseman 17:99161153081d 420 yellowLED = 1;
amiraseman 17:99161153081d 421 readData();
amiraseman 8:8b810c29eb7b 422
amiraseman 15:c6f7c4768cf2 423 dataLoggerFlag=0;
amiraseman 8:8b810c29eb7b 424 //write the data to the arrays (arrays used to plot graphs)
amiraseman 8:8b810c29eb7b 425 //read the data from sensor
amiraseman 15:c6f7c4768cf2 426
amiraseman 8:8b810c29eb7b 427 //Store the values in the array
amiraseman 15:c6f7c4768cf2 428 arrayT[i] = temperature;
amiraseman 15:c6f7c4768cf2 429 arrayP[i] = pressure/25 ;
amiraseman 15:c6f7c4768cf2 430
amiraseman 8:8b810c29eb7b 431
amiraseman 8:8b810c29eb7b 432 // calculate the average value of the arrays and save them to an integer
amiraseman 8:8b810c29eb7b 433
amiraseman 15:c6f7c4768cf2 434 for (k = 0 ; k<=i ; k++) { // loops through the arrays
amiraseman 15:c6f7c4768cf2 435
amiraseman 15:c6f7c4768cf2 436 sumTemperature += arrayT[k]; // calculates the sum of the stored values
amiraseman 15:c6f7c4768cf2 437 averageTemperature = sumTemperature/(k+1) ; //calculates the average value
amiraseman 8:8b810c29eb7b 438
amiraseman 15:c6f7c4768cf2 439 sumPressure += arrayP[k]; // calculates the sum of the stored values
amiraseman 18:374c452e19db 440 averagePressure =( 25*(sumPressure/(k+1))) ; //calculates the average value
amiraseman 15:c6f7c4768cf2 441
amiraseman 15:c6f7c4768cf2 442 if(arrayT[k]>maxTemperature) { // checks if any of the values in the array is bigger than the fist value
amiraseman 15:c6f7c4768cf2 443 maxTemperature=arrayT[k]; // if any greater values, sets the max value to that
amiraseman 8:8b810c29eb7b 444 }
amiraseman 15:c6f7c4768cf2 445 if(arrayT[k]<minTemperature) { // finds the smallest value of the array
amiraseman 15:c6f7c4768cf2 446 minTemperature=arrayT[k];
amiraseman 8:8b810c29eb7b 447 }
amiraseman 15:c6f7c4768cf2 448 if(arrayP[k]>maxPressure) { // checks if any of the values in the array is bigger than the fist value
amiraseman 18:374c452e19db 449 maxPressure=(25*arrayP[k]); // if any greater values, sets the max value to that
amiraseman 8:8b810c29eb7b 450 }
amiraseman 15:c6f7c4768cf2 451 if(arrayP[k]<maxPressure) {
amiraseman 18:374c452e19db 452 minPressure=(25*arrayP[k]);
amiraseman 8:8b810c29eb7b 453 }
amiraseman 8:8b810c29eb7b 454
amiraseman 8:8b810c29eb7b 455 }
amiraseman 18:374c452e19db 456
amiraseman 18:374c452e19db 457
amiraseman 15:c6f7c4768cf2 458 i++; // moves to the next cell in the array
amiraseman 8:8b810c29eb7b 459 if (i>83) {
amiraseman 8:8b810c29eb7b 460 lcd.clear();
amiraseman 8:8b810c29eb7b 461 i=0;
amiraseman 8:8b810c29eb7b 462 }
amiraseman 8:8b810c29eb7b 463 }
amiraseman 17:99161153081d 464 yellowLED = 0;
amiraseman 8:8b810c29eb7b 465 }
amiraseman 8:8b810c29eb7b 466
amiraseman 8:8b810c29eb7b 467
amiraseman 8:8b810c29eb7b 468
amiraseman 8:8b810c29eb7b 469
amiraseman 15:c6f7c4768cf2 470
amiraseman 8:8b810c29eb7b 471 void dataLogger() // shows a summery of data and the graphs
amiraseman 8:8b810c29eb7b 472 {
amiraseman 15:c6f7c4768cf2 473 int swipe = 1 ;
amiraseman 8:8b810c29eb7b 474 while (1) {
amiraseman 16:5ce95c8f4e89 475 wakeUp();
amiraseman 16:5ce95c8f4e89 476 updateTime();
amiraseman 15:c6f7c4768cf2 477 if (runLoggerFlag) {
amiraseman 15:c6f7c4768cf2 478
amiraseman 15:c6f7c4768cf2 479
amiraseman 15:c6f7c4768cf2 480 loggerData();
amiraseman 15:c6f7c4768cf2 481
amiraseman 15:c6f7c4768cf2 482 if (button4Flag) {
amiraseman 15:c6f7c4768cf2 483 button4Flag = 0 ;
amiraseman 15:c6f7c4768cf2 484 swipe ++;
amiraseman 15:c6f7c4768cf2 485 }
amiraseman 15:c6f7c4768cf2 486 if (swipe > 4) {
amiraseman 15:c6f7c4768cf2 487 swipe = 1;
amiraseman 15:c6f7c4768cf2 488 }
amiraseman 15:c6f7c4768cf2 489
amiraseman 15:c6f7c4768cf2 490 strncpy(buffer0, bufferTime, 14);
amiraseman 15:c6f7c4768cf2 491 int display5 = sprintf (buffer5, " Back Next");//convert integer to buffer str
amiraseman 8:8b810c29eb7b 492
amiraseman 15:c6f7c4768cf2 493 switch (swipe) {
amiraseman 15:c6f7c4768cf2 494 case 1: {
amiraseman 15:c6f7c4768cf2 495 int display1 = sprintf (buffer1, "Temperature");
amiraseman 15:c6f7c4768cf2 496 int display2 = sprintf (buffer2, "Min = %d", minTemperature);
amiraseman 15:c6f7c4768cf2 497 int display3 = sprintf (buffer3, "Max = %d", maxTemperature);
amiraseman 15:c6f7c4768cf2 498 int display4 = sprintf (buffer4, "Avg = %d", averageTemperature);
amiraseman 15:c6f7c4768cf2 499 display();
amiraseman 15:c6f7c4768cf2 500 break;
amiraseman 15:c6f7c4768cf2 501 }
amiraseman 15:c6f7c4768cf2 502 case 2 : {
amiraseman 15:c6f7c4768cf2 503 lcd.clear();
amiraseman 15:c6f7c4768cf2 504 lcd.printString(" Temperature",0,0);
amiraseman 15:c6f7c4768cf2 505 lcd.plotArray(arrayT);
amiraseman 15:c6f7c4768cf2 506 break;
amiraseman 15:c6f7c4768cf2 507 }
amiraseman 15:c6f7c4768cf2 508 case 3 : {
amiraseman 15:c6f7c4768cf2 509 int display11 = sprintf (buffer1, "Pressure");
amiraseman 15:c6f7c4768cf2 510 int display22 = sprintf (buffer2, "Min = %d", minPressure);
amiraseman 15:c6f7c4768cf2 511 int display33 = sprintf (buffer3, "Max = %d", maxPressure);
amiraseman 15:c6f7c4768cf2 512 int display44 = sprintf (buffer4, "Avg = %d", averagePressure);
amiraseman 15:c6f7c4768cf2 513 display();
amiraseman 15:c6f7c4768cf2 514 break;
amiraseman 15:c6f7c4768cf2 515 }
amiraseman 15:c6f7c4768cf2 516 case 4 : {
amiraseman 15:c6f7c4768cf2 517 lcd.clear();
amiraseman 15:c6f7c4768cf2 518 lcd.printString(" Pressure",0,0);
amiraseman 15:c6f7c4768cf2 519 lcd.plotArray(arrayP);
amiraseman 15:c6f7c4768cf2 520 break;
amiraseman 15:c6f7c4768cf2 521 }
amiraseman 15:c6f7c4768cf2 522 default :
amiraseman 15:c6f7c4768cf2 523 break;
amiraseman 15:c6f7c4768cf2 524 }
amiraseman 15:c6f7c4768cf2 525 } else {
amiraseman 15:c6f7c4768cf2 526 lcd.clear();
amiraseman 15:c6f7c4768cf2 527 lcd.printString(" To Turn On",0,1);
amiraseman 15:c6f7c4768cf2 528 lcd.printString(" Go To",0,2);
amiraseman 15:c6f7c4768cf2 529 lcd.printString(" Settings",0,3);
amiraseman 15:c6f7c4768cf2 530 lcd.printString ("Back",0,5);
amiraseman 15:c6f7c4768cf2 531
amiraseman 8:8b810c29eb7b 532 }
amiraseman 8:8b810c29eb7b 533
amiraseman 15:c6f7c4768cf2 534 if (button3Flag) {
amiraseman 15:c6f7c4768cf2 535 button3Flag=0;
amiraseman 15:c6f7c4768cf2 536 break;
amiraseman 8:8b810c29eb7b 537 }
amiraseman 8:8b810c29eb7b 538 }
amiraseman 8:8b810c29eb7b 539 }
amiraseman 8:8b810c29eb7b 540
amiraseman 18:374c452e19db 541
amiraseman 18:374c452e19db 542
amiraseman 18:374c452e19db 543
amiraseman 18:374c452e19db 544 void thresholdCheck()
amiraseman 17:99161153081d 545 {
amiraseman 18:374c452e19db 546 if (temperature == fsmH[0].output) { //if the current temp is less than the set threshold
amiraseman 18:374c452e19db 547 while (1) {
amiraseman 18:374c452e19db 548 redLED = 0 ;
amiraseman 18:374c452e19db 549 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 550 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 551 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 552 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 553 int display4 = sprintf (buffer4, "%0.1d!",temperature);
amiraseman 18:374c452e19db 554 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 555 display();
amiraseman 18:374c452e19db 556 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 557 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 558 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 559 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 560 redLED = 1 ;
amiraseman 18:374c452e19db 561 if (button3Flag) {
amiraseman 18:374c452e19db 562 buzzer = 0 ;
amiraseman 18:374c452e19db 563 button3Flag=0;
amiraseman 18:374c452e19db 564 goto exit ;
amiraseman 18:374c452e19db 565 }
amiraseman 18:374c452e19db 566 }
amiraseman 18:374c452e19db 567 }
amiraseman 18:374c452e19db 568 }
amiraseman 18:374c452e19db 569 if (temperature == fsmH[1].output) { //if the current temp is greater than the set threshold
amiraseman 18:374c452e19db 570 while (1) {
amiraseman 18:374c452e19db 571 redLED = 0 ;
amiraseman 18:374c452e19db 572 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 573 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 574 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 575 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 576 int display4 = sprintf (buffer4, "%0.1d!",temperature );
amiraseman 18:374c452e19db 577 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 578 display();
amiraseman 18:374c452e19db 579 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 580 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 581 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 582 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 583 redLED = 1 ;
amiraseman 18:374c452e19db 584 if (button3Flag) {
amiraseman 18:374c452e19db 585 buzzer = 0 ;
amiraseman 18:374c452e19db 586 button3Flag=0;
amiraseman 18:374c452e19db 587 goto exit ;
amiraseman 18:374c452e19db 588 }
amiraseman 18:374c452e19db 589 }
amiraseman 18:374c452e19db 590 }
amiraseman 18:374c452e19db 591 }
amiraseman 18:374c452e19db 592 if (pressure == fsmH[2].output) { //if the current pressure is less than the set threshold
amiraseman 18:374c452e19db 593 while (1) {
amiraseman 18:374c452e19db 594 redLED = 0 ;
amiraseman 18:374c452e19db 595 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 596 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 597 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 598 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 599 int display4 = sprintf (buffer4, "%0.1f!",pressure);
amiraseman 18:374c452e19db 600 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 601 display();
amiraseman 18:374c452e19db 602 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 603 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 604 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 605 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 606 redLED = 1 ;
amiraseman 18:374c452e19db 607 if (button3Flag) {
amiraseman 18:374c452e19db 608 buzzer = 0 ;
amiraseman 18:374c452e19db 609 button3Flag=0;
amiraseman 18:374c452e19db 610 goto exit ;
amiraseman 18:374c452e19db 611 }
amiraseman 18:374c452e19db 612 }
amiraseman 18:374c452e19db 613 }
amiraseman 18:374c452e19db 614 }
amiraseman 18:374c452e19db 615 if (pressure == fsmH[3].output) { //if the current pressure is greater than the set threshold
amiraseman 18:374c452e19db 616 while (1) {
amiraseman 18:374c452e19db 617 redLED = 0 ;
amiraseman 18:374c452e19db 618 strncpy(buffer0, bufferTime, 14);
amiraseman 18:374c452e19db 619 int display2 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 620 int display0 = sprintf (buffer2, "Threshold");
amiraseman 18:374c452e19db 621 int display1 = sprintf (buffer3, "Reached!");
amiraseman 18:374c452e19db 622 int display4 = sprintf (buffer4, "%0.1f!",pressure);
amiraseman 18:374c452e19db 623 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 624 display();
amiraseman 18:374c452e19db 625 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 626 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 627 buzzer=1; // set duty cycle
amiraseman 18:374c452e19db 628 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 629 redLED = 1 ;
amiraseman 18:374c452e19db 630 if (button3Flag) {
amiraseman 18:374c452e19db 631 buzzer = 0 ;
amiraseman 18:374c452e19db 632 button3Flag=0;
amiraseman 18:374c452e19db 633 goto exit ;
amiraseman 18:374c452e19db 634 }
amiraseman 18:374c452e19db 635 }
amiraseman 18:374c452e19db 636 }
amiraseman 18:374c452e19db 637 }
amiraseman 18:374c452e19db 638 exit:
amiraseman 18:374c452e19db 639 redLED = 0 ;
amiraseman 18:374c452e19db 640
amiraseman 18:374c452e19db 641 }
amiraseman 18:374c452e19db 642
amiraseman 18:374c452e19db 643
amiraseman 18:374c452e19db 644 void threshold()
amiraseman 18:374c452e19db 645 {
amiraseman 18:374c452e19db 646 powerSaverCheck();
amiraseman 18:374c452e19db 647 state = 0;
amiraseman 18:374c452e19db 648 //sets the initial threshhold values to the values recieved from the sensor
amiraseman 18:374c452e19db 649 readData();
amiraseman 18:374c452e19db 650 fsmH[0].output = temperature;
amiraseman 18:374c452e19db 651 fsmH[1].output = temperature;
amiraseman 18:374c452e19db 652 fsmH[2].output = pressure;
amiraseman 18:374c452e19db 653 fsmH[3].output = pressure;
amiraseman 18:374c452e19db 654
amiraseman 17:99161153081d 655 while (1) {
amiraseman 18:374c452e19db 656
amiraseman 18:374c452e19db 657 wakeUp();
amiraseman 18:374c452e19db 658 updateTime();
amiraseman 18:374c452e19db 659 loggerData();
amiraseman 18:374c452e19db 660
amiraseman 18:374c452e19db 661
amiraseman 18:374c452e19db 662
amiraseman 18:374c452e19db 663 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 18:374c452e19db 664 int display1 = sprintf (buffer1, "");//convert integer to buffer str
amiraseman 18:374c452e19db 665 int display2 = sprintf (buffer2, "");//convert integer to buffer str
amiraseman 18:374c452e19db 666 int display3 = sprintf (buffer3, ">>%s %d", fsmH[state].title,fsmH[state].output);//convert integer to buffer str
amiraseman 18:374c452e19db 667 int display4 = sprintf (buffer4, "");//convert integer to buffer str
amiraseman 18:374c452e19db 668 int display5 = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 18:374c452e19db 669
amiraseman 18:374c452e19db 670
amiraseman 17:99161153081d 671 display();
amiraseman 18:374c452e19db 672
amiraseman 18:374c452e19db 673
amiraseman 18:374c452e19db 674
amiraseman 18:374c452e19db 675 if (button4Flag) {
amiraseman 18:374c452e19db 676 button4Flag= 0;
amiraseman 18:374c452e19db 677 fsmH[state].output ++;
amiraseman 18:374c452e19db 678 }
amiraseman 18:374c452e19db 679
amiraseman 18:374c452e19db 680
amiraseman 18:374c452e19db 681 //checks the limits of the values
amiraseman 18:374c452e19db 682 if (fsmH[0].output >(temperature*2)) { //min temperature
amiraseman 18:374c452e19db 683 fsmH[0].output = -(temperature*2) ;
amiraseman 18:374c452e19db 684 }
amiraseman 18:374c452e19db 685 if (fsmH[1].output>(temperature*2)) { // max temperature
amiraseman 18:374c452e19db 686 fsmH[1].output = -(temperature*2) ;
amiraseman 18:374c452e19db 687 }
amiraseman 18:374c452e19db 688 if (fsmH[2].output>(pressure*2)) { //min pressure
amiraseman 18:374c452e19db 689 fsmH[2].output = -(pressure*2) ;
amiraseman 18:374c452e19db 690 }
amiraseman 18:374c452e19db 691 if (fsmH[3].output>(pressure*2)) { //max pressure
amiraseman 18:374c452e19db 692 fsmH[3].output = -(pressure*2) ;
amiraseman 18:374c452e19db 693 }
amiraseman 18:374c452e19db 694
amiraseman 18:374c452e19db 695
amiraseman 18:374c452e19db 696 if (button3Flag) {
amiraseman 18:374c452e19db 697 button3Flag=0;
amiraseman 18:374c452e19db 698 while (1) {
amiraseman 18:374c452e19db 699 int display0 = sprintf (buffer0, "");
amiraseman 18:374c452e19db 700 int display1 = sprintf (buffer1, "");
amiraseman 18:374c452e19db 701 int display2 = sprintf (buffer2, "Set Thresholds?");
amiraseman 18:374c452e19db 702 int display3 = sprintf (buffer3, ">>%s", fsmG[state].title); // yes or no (1 or 0 output)
amiraseman 18:374c452e19db 703 int display4 = sprintf (buffer4, "");
amiraseman 18:374c452e19db 704 int display5 = sprintf (buffer5, "");
amiraseman 18:374c452e19db 705 display();
amiraseman 18:374c452e19db 706 thresholdAlarmFlag = fsmG[state].output ; //yes or no (1 or 0)
amiraseman 18:374c452e19db 707 if (state>1) {
amiraseman 18:374c452e19db 708 state = 0;
amiraseman 18:374c452e19db 709 }
amiraseman 18:374c452e19db 710 if (state<0) {
amiraseman 18:374c452e19db 711 state = 1;
amiraseman 18:374c452e19db 712 }
amiraseman 18:374c452e19db 713 if (button3Flag) {
amiraseman 18:374c452e19db 714 button3Flag=0;
amiraseman 18:374c452e19db 715 serial.printf("thresholds flag :%i \n",fsmG[state].output);
amiraseman 18:374c452e19db 716 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 717 goto exit;
amiraseman 18:374c452e19db 718 }
amiraseman 18:374c452e19db 719 }
amiraseman 18:374c452e19db 720 }
amiraseman 18:374c452e19db 721 }
amiraseman 18:374c452e19db 722 exit:
amiraseman 18:374c452e19db 723 return;
amiraseman 18:374c452e19db 724 }
amiraseman 18:374c452e19db 725
amiraseman 18:374c452e19db 726
amiraseman 18:374c452e19db 727
amiraseman 18:374c452e19db 728
amiraseman 18:374c452e19db 729
amiraseman 18:374c452e19db 730
amiraseman 18:374c452e19db 731
amiraseman 18:374c452e19db 732 void alarmClockCheck()
amiraseman 18:374c452e19db 733 {
amiraseman 18:374c452e19db 734 if (currentTime == UNIXdate) { //if the current time is equal to the time set by user
amiraseman 18:374c452e19db 735 //serial.printf("Alarm clock flag is set\n");
amiraseman 18:374c452e19db 736 alarmClockFlag =0 ;
amiraseman 18:374c452e19db 737 while (1) {
amiraseman 18:374c452e19db 738 int display0 = sprintf (buffer0, "");
amiraseman 18:374c452e19db 739 int display1 = sprintf (buffer1, "Alarm !");
amiraseman 18:374c452e19db 740 strncpy(buffer2, bufferTime, 14);
amiraseman 18:374c452e19db 741 int display2 = sprintf (buffer3, "");
amiraseman 18:374c452e19db 742 int display4 = sprintf (buffer4, "");
amiraseman 18:374c452e19db 743 int display5 = sprintf (buffer5, "Stop");
amiraseman 18:374c452e19db 744 display();
amiraseman 18:374c452e19db 745 for (int i=0; i<=11; i++) {
amiraseman 18:374c452e19db 746 buzzer.period(1/(frequency[i])); // set PWM period
amiraseman 18:374c452e19db 747 buzzer=0.5; // set duty cycle
amiraseman 18:374c452e19db 748 wait(0.5*beat[i]); // hold for beat period
amiraseman 18:374c452e19db 749 if (button3Flag) {
amiraseman 18:374c452e19db 750 buzzer = 0 ;
amiraseman 18:374c452e19db 751 break;
amiraseman 18:374c452e19db 752 }
amiraseman 18:374c452e19db 753 }
amiraseman 17:99161153081d 754 if (button3Flag) {
amiraseman 18:374c452e19db 755 button3Flag=0;
amiraseman 17:99161153081d 756 break;
amiraseman 17:99161153081d 757 }
amiraseman 18:374c452e19db 758
amiraseman 17:99161153081d 759 }
amiraseman 18:374c452e19db 760 }
amiraseman 18:374c452e19db 761 }
amiraseman 17:99161153081d 762
amiraseman 18:374c452e19db 763
amiraseman 17:99161153081d 764
amiraseman 17:99161153081d 765
amiraseman 17:99161153081d 766
amiraseman 17:99161153081d 767
amiraseman 17:99161153081d 768
amiraseman 17:99161153081d 769 void alarmClock ()
amiraseman 17:99161153081d 770 {
amiraseman 17:99161153081d 771 powerSaverCheck();
amiraseman 17:99161153081d 772 state = 0;
amiraseman 17:99161153081d 773 while (1) {
amiraseman 17:99161153081d 774
amiraseman 17:99161153081d 775 wakeUp();
amiraseman 17:99161153081d 776 updateTime();
amiraseman 17:99161153081d 777 loggerData();
amiraseman 17:99161153081d 778 stateminus1=fsmC[state].nextState[0];
amiraseman 17:99161153081d 779 stateminus2=fsmC[stateminus1].nextState[0];
amiraseman 17:99161153081d 780 stateplus1=fsmC[state].nextState[1];
amiraseman 17:99161153081d 781 stateplus2=fsmC[stateplus1].nextState[1];
amiraseman 17:99161153081d 782
amiraseman 17:99161153081d 783
amiraseman 17:99161153081d 784
amiraseman 17:99161153081d 785
amiraseman 17:99161153081d 786 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 17:99161153081d 787 int display1 = sprintf (buffer1, "%s %d", fsmC[stateminus2].title,fsmC[stateminus2].output);//convert integer to buffer str
amiraseman 17:99161153081d 788 int display2 = sprintf (buffer2, "%s %d", fsmC[stateminus1].title,fsmC[stateminus1].output);//convert integer to buffer str
amiraseman 17:99161153081d 789 int display3 = sprintf (buffer3, ">>%s %d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
amiraseman 17:99161153081d 790 int display4 = sprintf (buffer4, "%s %d", fsmC[stateplus1].title,fsmC[stateplus1].output);//convert integer to buffer str
amiraseman 17:99161153081d 791 int display5 = sprintf (buffer5, "%s %d", fsmC[stateplus2].title,fsmC[stateplus2].output);//convert integer to buffer str
amiraseman 17:99161153081d 792
amiraseman 17:99161153081d 793
amiraseman 17:99161153081d 794
amiraseman 17:99161153081d 795 display();
amiraseman 17:99161153081d 796
amiraseman 17:99161153081d 797
amiraseman 17:99161153081d 798
amiraseman 17:99161153081d 799 if (button4Flag) {
amiraseman 17:99161153081d 800 button4Flag= 0;
amiraseman 17:99161153081d 801 fsmC[state].output ++;
amiraseman 17:99161153081d 802 calculateUNIXTime();
amiraseman 17:99161153081d 803 }
amiraseman 17:99161153081d 804
amiraseman 17:99161153081d 805
amiraseman 17:99161153081d 806 //checks the limits of the values
amiraseman 17:99161153081d 807 if (fsmC[0].output >23) { //hour
amiraseman 17:99161153081d 808 fsmC[0].output = 0 ;
amiraseman 17:99161153081d 809 }
amiraseman 17:99161153081d 810 if (fsmC[1].output>59) { // minute
amiraseman 17:99161153081d 811 fsmC[1].output = 0 ;
amiraseman 17:99161153081d 812 }
amiraseman 17:99161153081d 813 if (fsmC[3].output>11) { //month
amiraseman 17:99161153081d 814 fsmC[3].output = 0 ;
amiraseman 17:99161153081d 815 }
amiraseman 17:99161153081d 816 if (fsmC[2].output>31) { //day
amiraseman 17:99161153081d 817 fsmC[2].output = 1 ;
amiraseman 17:99161153081d 818 }
amiraseman 17:99161153081d 819 if (fsmC[4].output>2030) { //year
amiraseman 17:99161153081d 820 fsmC[4].output = 2015 ;
amiraseman 17:99161153081d 821 }
amiraseman 17:99161153081d 822
amiraseman 17:99161153081d 823
amiraseman 17:99161153081d 824
amiraseman 17:99161153081d 825 if (button3Flag) {
amiraseman 17:99161153081d 826 button3Flag=0;
amiraseman 17:99161153081d 827 while (1) {
amiraseman 17:99161153081d 828 int display0 = sprintf (buffer0, "");
amiraseman 17:99161153081d 829 int display1 = sprintf (buffer1, "");
amiraseman 17:99161153081d 830 int display2 = sprintf (buffer2, "Set Alarm?");
amiraseman 17:99161153081d 831 int display3 = sprintf (buffer3, ">>%s", fsmG[state].title);
amiraseman 17:99161153081d 832 int display4 = sprintf (buffer4, "");
amiraseman 17:99161153081d 833 int display5 = sprintf (buffer5, "");
amiraseman 17:99161153081d 834 display();
amiraseman 18:374c452e19db 835 alarmClockFlag = fsmG[state].output ;
amiraseman 17:99161153081d 836 if (state>1) {
amiraseman 17:99161153081d 837 state = 0;
amiraseman 17:99161153081d 838 }
amiraseman 17:99161153081d 839 if (state<0) {
amiraseman 17:99161153081d 840 state = 1;
amiraseman 17:99161153081d 841 }
amiraseman 17:99161153081d 842 if (button3Flag) {
amiraseman 17:99161153081d 843 button3Flag=0;
amiraseman 17:99161153081d 844 goto exit;
amiraseman 17:99161153081d 845 }
amiraseman 17:99161153081d 846 }
amiraseman 17:99161153081d 847 }
amiraseman 17:99161153081d 848 }
amiraseman 17:99161153081d 849 exit:
amiraseman 17:99161153081d 850 return;
amiraseman 17:99161153081d 851 }
amiraseman 17:99161153081d 852
amiraseman 17:99161153081d 853
amiraseman 17:99161153081d 854
amiraseman 17:99161153081d 855
amiraseman 17:99161153081d 856
amiraseman 17:99161153081d 857 void alarmsMenu ()
amiraseman 17:99161153081d 858 {
amiraseman 17:99161153081d 859 state = 0 ;
amiraseman 17:99161153081d 860 powerSaverCheck();
amiraseman 17:99161153081d 861 while (1) {
amiraseman 17:99161153081d 862 wakeUp();
amiraseman 17:99161153081d 863 updateTime();
amiraseman 17:99161153081d 864 loggerData();
amiraseman 17:99161153081d 865 int display0 = sprintf (buffer0, " Back Next");
amiraseman 17:99161153081d 866 int display1 = sprintf (buffer1, "");
amiraseman 17:99161153081d 867 int display2 = sprintf (buffer2, "");
amiraseman 17:99161153081d 868 int display3 = sprintf (buffer3, ">>%s", fsmF[state].title);
amiraseman 17:99161153081d 869 int display4 = sprintf (buffer4, "");
amiraseman 17:99161153081d 870 int display5 = sprintf (buffer5, "");
amiraseman 17:99161153081d 871
amiraseman 17:99161153081d 872 display();
amiraseman 17:99161153081d 873
amiraseman 17:99161153081d 874
amiraseman 17:99161153081d 875
amiraseman 17:99161153081d 876 if (state > 1) {
amiraseman 17:99161153081d 877 state = 0 ;
amiraseman 17:99161153081d 878 }
amiraseman 17:99161153081d 879 if (state < 0) {
amiraseman 17:99161153081d 880 state = 1 ;
amiraseman 17:99161153081d 881 }
amiraseman 17:99161153081d 882 if (button3Flag) {
amiraseman 17:99161153081d 883 button3Flag=0;
amiraseman 17:99161153081d 884 state = 0;
amiraseman 17:99161153081d 885 break;
amiraseman 17:99161153081d 886 }
amiraseman 17:99161153081d 887 if (button4Flag) {
amiraseman 17:99161153081d 888 if (state == 0) { // temp and pressure thresholds
amiraseman 18:374c452e19db 889 threshold();
amiraseman 17:99161153081d 890
amiraseman 17:99161153081d 891 }
amiraseman 17:99161153081d 892 if (state == 1) {// alarm clock
amiraseman 17:99161153081d 893
amiraseman 17:99161153081d 894 alarmClock();
amiraseman 17:99161153081d 895 }
amiraseman 17:99161153081d 896 }
amiraseman 17:99161153081d 897 }
amiraseman 17:99161153081d 898 }
amiraseman 17:99161153081d 899
amiraseman 17:99161153081d 900
amiraseman 17:99161153081d 901
amiraseman 15:c6f7c4768cf2 902
amiraseman 7:328dc986484f 903 void dataLoggerSetting()
amiraseman 7:328dc986484f 904 {
amiraseman 15:c6f7c4768cf2 905 state = runLoggerFlag ; //inits the state to the saved flag by the user in the past
amiraseman 13:213bf5887930 906 powerSaverCheck();
amiraseman 13:213bf5887930 907 while (1) {
amiraseman 13:213bf5887930 908 wakeUp();
amiraseman 13:213bf5887930 909 updateTime();
amiraseman 15:c6f7c4768cf2 910 loggerData();
amiraseman 13:213bf5887930 911 int display0 = sprintf (buffer0, " Back Save");
amiraseman 14:f3eb0fb6ecd5 912 int display1 = sprintf (buffer1, "");
amiraseman 14:f3eb0fb6ecd5 913 int display2 = sprintf (buffer2, "Data Logger");
amiraseman 14:f3eb0fb6ecd5 914 int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
amiraseman 14:f3eb0fb6ecd5 915 if (state == 1) {
amiraseman 14:f3eb0fb6ecd5 916 int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
amiraseman 18:374c452e19db 917 } else { // if the power saver is off it doesnt show the time
amiraseman 14:f3eb0fb6ecd5 918 int display4 = sprintf (buffer4, "");
amiraseman 13:213bf5887930 919 }
amiraseman 14:f3eb0fb6ecd5 920 int dispaly5 = sprintf (buffer5, "");
amiraseman 8:8b810c29eb7b 921
amiraseman 8:8b810c29eb7b 922
amiraseman 13:213bf5887930 923 display();
amiraseman 7:328dc986484f 924
amiraseman 13:213bf5887930 925
amiraseman 7:328dc986484f 926
amiraseman 15:c6f7c4768cf2 927 runLoggerFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
amiraseman 14:f3eb0fb6ecd5 928 dataLoggerTime = fsmE[state].output; //sets the timer to to value of output from the fsm
amiraseman 18:374c452e19db 929 serial.printf("data logger Time = %i \n dataLoggerFlag = %i \n",dataLoggerTime , runLoggerFlag);
amiraseman 7:328dc986484f 930
amiraseman 14:f3eb0fb6ecd5 931 if (button4Flag) {
amiraseman 14:f3eb0fb6ecd5 932 button4Flag=0;
amiraseman 14:f3eb0fb6ecd5 933 fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
amiraseman 14:f3eb0fb6ecd5 934 }
amiraseman 14:f3eb0fb6ecd5 935 if (fsmE[state].output > 1800) {
amiraseman 14:f3eb0fb6ecd5 936 fsmE[state].output = 60 ;
amiraseman 7:328dc986484f 937 }
amiraseman 7:328dc986484f 938
amiraseman 14:f3eb0fb6ecd5 939 if (state > 1) {
amiraseman 14:f3eb0fb6ecd5 940 state = 0 ;
amiraseman 14:f3eb0fb6ecd5 941 }
amiraseman 14:f3eb0fb6ecd5 942
amiraseman 7:328dc986484f 943 if (button3Flag) {
amiraseman 15:c6f7c4768cf2 944 if (state == 1) { // if the data logger is swiched on
amiraseman 15:c6f7c4768cf2 945 dataLoggerTimer.attach(&dataLoggerTimerExpired, dataLoggerTime); // set the timer
amiraseman 15:c6f7c4768cf2 946 }
amiraseman 15:c6f7c4768cf2 947 if (state == 0) { // if the data logger is swiched off
amiraseman 15:c6f7c4768cf2 948 dataLoggerTimer.detach(); // detach the timer
amiraseman 15:c6f7c4768cf2 949 }
amiraseman 15:c6f7c4768cf2 950 dataLoggerFlag = 1;
amiraseman 7:328dc986484f 951 button3Flag=0;
amiraseman 17:99161153081d 952 state = 0;
amiraseman 7:328dc986484f 953 break;
amiraseman 7:328dc986484f 954 }
amiraseman 14:f3eb0fb6ecd5 955 wait (0.1);
amiraseman 7:328dc986484f 956 }
amiraseman 7:328dc986484f 957
amiraseman 7:328dc986484f 958 }
amiraseman 6:03f12eda070d 959
amiraseman 6:03f12eda070d 960
amiraseman 6:03f12eda070d 961
amiraseman 6:03f12eda070d 962
amiraseman 6:03f12eda070d 963
amiraseman 6:03f12eda070d 964
amiraseman 6:03f12eda070d 965
amiraseman 6:03f12eda070d 966
amiraseman 6:03f12eda070d 967
amiraseman 6:03f12eda070d 968
amiraseman 6:03f12eda070d 969
amiraseman 6:03f12eda070d 970
amiraseman 6:03f12eda070d 971 void powerSaverSetting()
amiraseman 6:03f12eda070d 972 {
amiraseman 13:213bf5887930 973 state = powerSaverFlag ; //inits the state to the saved flag by the user in the past
amiraseman 13:213bf5887930 974 powerSaverCheck();
amiraseman 6:03f12eda070d 975 while (1) {
amiraseman 6:03f12eda070d 976 wakeUp();
amiraseman 13:213bf5887930 977 updateTime();
amiraseman 15:c6f7c4768cf2 978 loggerData();
amiraseman 13:213bf5887930 979 int display0 = sprintf (buffer0, " Back Save");
amiraseman 13:213bf5887930 980 int display1 = sprintf (buffer1, "");
amiraseman 13:213bf5887930 981 int display2 = sprintf (buffer2, "Power Saver");
amiraseman 13:213bf5887930 982 int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
amiraseman 13:213bf5887930 983 if (state == 1) {
amiraseman 13:213bf5887930 984 int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
amiraseman 13:213bf5887930 985 } else { // if the power saver is off it dowsnt show the time
amiraseman 13:213bf5887930 986 int display4 = sprintf (buffer4, "");
amiraseman 6:03f12eda070d 987 }
amiraseman 13:213bf5887930 988 int dispaly5 = sprintf (buffer5, "");
amiraseman 13:213bf5887930 989
amiraseman 13:213bf5887930 990
amiraseman 13:213bf5887930 991 display();
amiraseman 13:213bf5887930 992
amiraseman 6:03f12eda070d 993
amiraseman 6:03f12eda070d 994
amiraseman 13:213bf5887930 995 powerSaverFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
amiraseman 13:213bf5887930 996 powerSaverTime = fsmE[state].output; //sets the timer to to value of output from the fsm
amiraseman 13:213bf5887930 997 serial.printf("Power Saver Time = %i \n powerSaverFlag = %i \n",powerSaverTime , powerSaverFlag);
amiraseman 6:03f12eda070d 998
amiraseman 13:213bf5887930 999 if (button4Flag) {
amiraseman 13:213bf5887930 1000 button4Flag=0;
amiraseman 13:213bf5887930 1001 fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
amiraseman 13:213bf5887930 1002 }
amiraseman 13:213bf5887930 1003 if (fsmE[state].output > 600) {
amiraseman 13:213bf5887930 1004 fsmE[state].output = 60 ;
amiraseman 6:03f12eda070d 1005 }
amiraseman 6:03f12eda070d 1006
amiraseman 13:213bf5887930 1007 if (state > 1) {
amiraseman 13:213bf5887930 1008 state = 0 ;
amiraseman 13:213bf5887930 1009 }
amiraseman 13:213bf5887930 1010
amiraseman 6:03f12eda070d 1011 if (button3Flag) {
amiraseman 6:03f12eda070d 1012 button3Flag=0;
amiraseman 13:213bf5887930 1013 powerSaverCheck();
amiraseman 17:99161153081d 1014 state = 0;
amiraseman 6:03f12eda070d 1015 break;
amiraseman 6:03f12eda070d 1016 }
amiraseman 13:213bf5887930 1017 wait (0.1);
amiraseman 6:03f12eda070d 1018 }
amiraseman 6:03f12eda070d 1019 }
amiraseman 6:03f12eda070d 1020
amiraseman 6:03f12eda070d 1021
amiraseman 6:03f12eda070d 1022
amiraseman 6:03f12eda070d 1023
amiraseman 6:03f12eda070d 1024
amiraseman 6:03f12eda070d 1025
amiraseman 6:03f12eda070d 1026
amiraseman 6:03f12eda070d 1027
amiraseman 4:783276521952 1028 void calculateUNIXTime()
amiraseman 4:783276521952 1029 {
amiraseman 4:783276521952 1030 time_t rawtime;
amiraseman 4:783276521952 1031 struct tm * timeinfo;
amiraseman 4:783276521952 1032
amiraseman 17:99161153081d 1033 // get current timeinfo
amiraseman 17:99161153081d 1034 time ( &rawtime );
amiraseman 17:99161153081d 1035 // convert to struct
amiraseman 4:783276521952 1036 timeinfo = localtime ( &rawtime );
amiraseman 17:99161153081d 1037 // now modify the timeinfo to the given date
amiraseman 12:d4011389defe 1038 timeinfo->tm_year = (fsmC[4].output) - 1900;
amiraseman 12:d4011389defe 1039 timeinfo->tm_mon = (fsmC[3].output) - 1; //months since January - [0,11]
amiraseman 12:d4011389defe 1040 timeinfo->tm_mday = (fsmC[2].output) ; //day of the month - [1,31]
amiraseman 12:d4011389defe 1041 timeinfo->tm_hour = (fsmC[0].output) ; //hours since midnight - [0,23]
amiraseman 12:d4011389defe 1042 timeinfo->tm_min = (fsmC[1].output) ; //minutes after the hour - [0,59]
amiraseman 12:d4011389defe 1043 timeinfo->tm_sec = 0 ; //seconds after the minute - [0,59]
amiraseman 4:783276521952 1044
amiraseman 17:99161153081d 1045 //call mktime to create unix time stamp from timeinfo struct
amiraseman 4:783276521952 1046 UNIXdate = mktime ( timeinfo );
amiraseman 4:783276521952 1047
amiraseman 4:783276521952 1048 }
amiraseman 4:783276521952 1049
amiraseman 5:6952998ab446 1050
amiraseman 13:213bf5887930 1051 void notificationSetting ()
amiraseman 4:783276521952 1052 {
amiraseman 4:783276521952 1053 while(1) {
amiraseman 6:03f12eda070d 1054 wakeUp();
amiraseman 12:d4011389defe 1055 powerSaverCheck();
amiraseman 17:99161153081d 1056 loggerData();
amiraseman 5:6952998ab446 1057
amiraseman 5:6952998ab446 1058
amiraseman 5:6952998ab446 1059 if (button4Flag) {
amiraseman 5:6952998ab446 1060 button4Flag=0;
amiraseman 12:d4011389defe 1061
amiraseman 5:6952998ab446 1062 }
amiraseman 5:6952998ab446 1063
amiraseman 4:783276521952 1064 if (button3Flag) {
amiraseman 4:783276521952 1065 button3Flag=0;
amiraseman 17:99161153081d 1066 state = 0;
amiraseman 4:783276521952 1067 break;
amiraseman 4:783276521952 1068 }
amiraseman 4:783276521952 1069 }
amiraseman 0:d78ac68077c6 1070 }
amiraseman 0:d78ac68077c6 1071
amiraseman 0:d78ac68077c6 1072
amiraseman 2:1d7ef0f49b35 1073
amiraseman 12:d4011389defe 1074 void unitsSetting()
amiraseman 3:8a559b949470 1075 {
amiraseman 12:d4011389defe 1076 state = 0;
amiraseman 13:213bf5887930 1077 powerSaverCheck();
amiraseman 11:a78e01c9f054 1078 while (1) {
amiraseman 12:d4011389defe 1079 wakeUp();
amiraseman 12:d4011389defe 1080 updateTime();
amiraseman 17:99161153081d 1081 loggerData();
amiraseman 12:d4011389defe 1082 stateminus1=fsmD[state].nextState[0];
amiraseman 12:d4011389defe 1083 stateminus2=fsmD[stateminus1].nextState[0];
amiraseman 12:d4011389defe 1084 stateplus1=fsmD[state].nextState[1];
amiraseman 12:d4011389defe 1085 stateplus2=fsmD[stateplus1].nextState[1];
amiraseman 12:d4011389defe 1086
amiraseman 3:8a559b949470 1087
amiraseman 4:783276521952 1088
amiraseman 3:8a559b949470 1089
amiraseman 12:d4011389defe 1090 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 12:d4011389defe 1091 int display1 = sprintf (buffer1, "%s", fsmD[stateminus2].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1092 int display2 = sprintf (buffer2, "%s", fsmD[stateminus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1093 int display3 = sprintf (buffer3, ">>%s", fsmD[state].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1094 int display4 = sprintf (buffer4, "%s", fsmD[stateplus1].title);//convert integer to buffer str
amiraseman 12:d4011389defe 1095 int dispaly5 = sprintf (buffer5, "");//convert integer to buffer str
amiraseman 12:d4011389defe 1096
amiraseman 12:d4011389defe 1097
amiraseman 12:d4011389defe 1098 unitFlag = fsmD[state].output;
amiraseman 12:d4011389defe 1099
amiraseman 12:d4011389defe 1100 display();
amiraseman 12:d4011389defe 1101
amiraseman 12:d4011389defe 1102 if (button3Flag) {
amiraseman 12:d4011389defe 1103 button3Flag=0;
amiraseman 17:99161153081d 1104 state = 0;
amiraseman 12:d4011389defe 1105 break;
amiraseman 12:d4011389defe 1106 }
amiraseman 12:d4011389defe 1107
amiraseman 12:d4011389defe 1108 wait (0.1);
amiraseman 12:d4011389defe 1109 }
amiraseman 12:d4011389defe 1110 }
amiraseman 12:d4011389defe 1111
amiraseman 12:d4011389defe 1112
amiraseman 12:d4011389defe 1113
amiraseman 12:d4011389defe 1114
amiraseman 12:d4011389defe 1115
amiraseman 12:d4011389defe 1116
amiraseman 12:d4011389defe 1117
amiraseman 12:d4011389defe 1118 void timeDateSetting()
amiraseman 12:d4011389defe 1119 {
amiraseman 13:213bf5887930 1120 powerSaverCheck();
amiraseman 12:d4011389defe 1121 state = 0;
amiraseman 12:d4011389defe 1122 while (1) {
amiraseman 11:a78e01c9f054 1123 wakeUp();
amiraseman 11:a78e01c9f054 1124 updateTime();
amiraseman 17:99161153081d 1125 loggerData();
amiraseman 12:d4011389defe 1126
amiraseman 12:d4011389defe 1127 int display0 = sprintf (buffer0, " Back Save");//convert integer to buffer str
amiraseman 19:61eaa5235ccf 1128 int display1 = sprintf (buffer1, "");
amiraseman 19:61eaa5235ccf 1129 int display2 = sprintf (buffer2, "");
amiraseman 12:d4011389defe 1130 int display3 = sprintf (buffer3, ">>%s %d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
amiraseman 19:61eaa5235ccf 1131 int display4 = sprintf (buffer4, "");
amiraseman 19:61eaa5235ccf 1132 int display5 = sprintf (buffer5, "");
amiraseman 12:d4011389defe 1133
amiraseman 11:a78e01c9f054 1134
amiraseman 11:a78e01c9f054 1135 display();
amiraseman 3:8a559b949470 1136
amiraseman 4:783276521952 1137
amiraseman 11:a78e01c9f054 1138
amiraseman 12:d4011389defe 1139 if (button4Flag) {
amiraseman 12:d4011389defe 1140 button4Flag= 0;
amiraseman 13:213bf5887930 1141 fsmC[state].output ++;
amiraseman 12:d4011389defe 1142 calculateUNIXTime();
amiraseman 12:d4011389defe 1143 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 12:d4011389defe 1144 }
amiraseman 11:a78e01c9f054 1145
amiraseman 11:a78e01c9f054 1146
amiraseman 12:d4011389defe 1147 //checks the limits of the values
amiraseman 12:d4011389defe 1148 if (fsmC[0].output >23) { //hour
amiraseman 12:d4011389defe 1149 fsmC[0].output = 0 ;
amiraseman 12:d4011389defe 1150 }
amiraseman 12:d4011389defe 1151 if (fsmC[1].output>59) { // minute
amiraseman 12:d4011389defe 1152 fsmC[1].output = 0 ;
amiraseman 12:d4011389defe 1153 }
amiraseman 12:d4011389defe 1154 if (fsmC[3].output>11) { //month
amiraseman 12:d4011389defe 1155 fsmC[3].output = 0 ;
amiraseman 12:d4011389defe 1156 }
amiraseman 12:d4011389defe 1157 if (fsmC[2].output>31) { //day
amiraseman 12:d4011389defe 1158 fsmC[2].output = 1 ;
amiraseman 12:d4011389defe 1159 }
amiraseman 12:d4011389defe 1160 if (fsmC[4].output>2030) { //year
amiraseman 12:d4011389defe 1161 fsmC[4].output = 2015 ;
amiraseman 12:d4011389defe 1162 }
amiraseman 11:a78e01c9f054 1163
amiraseman 11:a78e01c9f054 1164
amiraseman 12:d4011389defe 1165
amiraseman 11:a78e01c9f054 1166 if (button3Flag) {
amiraseman 11:a78e01c9f054 1167 button3Flag=0;
amiraseman 17:99161153081d 1168 state = 0;
amiraseman 11:a78e01c9f054 1169 break;
amiraseman 11:a78e01c9f054 1170 }
amiraseman 5:6952998ab446 1171 wait (0.1);
amiraseman 3:8a559b949470 1172 }
amiraseman 3:8a559b949470 1173 }
amiraseman 3:8a559b949470 1174
amiraseman 3:8a559b949470 1175
amiraseman 3:8a559b949470 1176
amiraseman 2:1d7ef0f49b35 1177
amiraseman 2:1d7ef0f49b35 1178 void settingsMenu()
amiraseman 2:1d7ef0f49b35 1179 {
amiraseman 12:d4011389defe 1180 state = 0;
amiraseman 13:213bf5887930 1181 powerSaverCheck();
amiraseman 11:a78e01c9f054 1182 while(1) {
amiraseman 12:d4011389defe 1183
amiraseman 6:03f12eda070d 1184
amiraseman 6:03f12eda070d 1185 wakeUp();
amiraseman 3:8a559b949470 1186 updateTime();
amiraseman 15:c6f7c4768cf2 1187 loggerData();
amiraseman 11:a78e01c9f054 1188 strncpy(buffer0, bufferTime, 14);
amiraseman 19:61eaa5235ccf 1189 int dispaly = sprintf (buffer1, "Settings");
amiraseman 19:61eaa5235ccf 1190 int dispaly1 = sprintf (buffer2, "");
amiraseman 10:7c976b5a5e25 1191 int dispaly2 = sprintf (buffer3, ">>%s", fsmB[state].title);//convert integer to buffer str
amiraseman 19:61eaa5235ccf 1192 int dispaly3 = sprintf (buffer4, "");
amiraseman 19:61eaa5235ccf 1193 int dispaly4 = sprintf (buffer5, "");
amiraseman 9:d1691d971f63 1194
amiraseman 9:d1691d971f63 1195 display();
amiraseman 9:d1691d971f63 1196
amiraseman 9:d1691d971f63 1197
amiraseman 10:7c976b5a5e25 1198 switch (state) {
amiraseman 11:a78e01c9f054 1199 case 0:
amiraseman 4:783276521952 1200 if (button4Flag) {
amiraseman 4:783276521952 1201 button4Flag=0;
amiraseman 4:783276521952 1202 timeDateSetting();
amiraseman 4:783276521952 1203 }
amiraseman 4:783276521952 1204
amiraseman 4:783276521952 1205
amiraseman 2:1d7ef0f49b35 1206 break;
amiraseman 11:a78e01c9f054 1207 case 1:
amiraseman 9:d1691d971f63 1208
amiraseman 5:6952998ab446 1209
amiraseman 5:6952998ab446 1210 if (button4Flag) {
amiraseman 5:6952998ab446 1211 button4Flag=0;
amiraseman 5:6952998ab446 1212 unitsSetting();
amiraseman 5:6952998ab446 1213 }
amiraseman 5:6952998ab446 1214
amiraseman 2:1d7ef0f49b35 1215 break;
amiraseman 11:a78e01c9f054 1216 case 2:
amiraseman 9:d1691d971f63 1217
amiraseman 4:783276521952 1218 if (button4Flag) {
amiraseman 4:783276521952 1219 button4Flag = 0;
amiraseman 13:213bf5887930 1220 notificationSetting();
amiraseman 4:783276521952 1221 }
amiraseman 2:1d7ef0f49b35 1222 break;
amiraseman 11:a78e01c9f054 1223 case 3:
amiraseman 6:03f12eda070d 1224 if (button4Flag) {
amiraseman 6:03f12eda070d 1225 button4Flag = 0;
amiraseman 6:03f12eda070d 1226 powerSaverSetting();
amiraseman 6:03f12eda070d 1227 }
amiraseman 2:1d7ef0f49b35 1228 break;
amiraseman 11:a78e01c9f054 1229 case 4:
amiraseman 7:328dc986484f 1230 if (button4Flag) {
amiraseman 7:328dc986484f 1231 button4Flag = 0;
amiraseman 7:328dc986484f 1232 dataLoggerSetting();
amiraseman 7:328dc986484f 1233 }
amiraseman 2:1d7ef0f49b35 1234 break;
amiraseman 2:1d7ef0f49b35 1235 default:
amiraseman 2:1d7ef0f49b35 1236 break;
amiraseman 2:1d7ef0f49b35 1237 }
amiraseman 4:783276521952 1238 if (button3Flag) {
amiraseman 2:1d7ef0f49b35 1239 button3Flag=0;
amiraseman 17:99161153081d 1240 state = 0;
amiraseman 2:1d7ef0f49b35 1241 break;
amiraseman 4:783276521952 1242 }
amiraseman 5:6952998ab446 1243 wait (0.1);
amiraseman 2:1d7ef0f49b35 1244 }
amiraseman 2:1d7ef0f49b35 1245 }
amiraseman 2:1d7ef0f49b35 1246
amiraseman 2:1d7ef0f49b35 1247
amiraseman 5:6952998ab446 1248 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 1249 {
amiraseman 13:213bf5887930 1250 wakeUp();
amiraseman 9:d1691d971f63 1251
amiraseman 11:a78e01c9f054 1252 strncpy(buffer0, bufferTime, 14);
amiraseman 19:61eaa5235ccf 1253 int dispaly = sprintf (buffer1, "Main Menu");
amiraseman 19:61eaa5235ccf 1254 int dispaly1 = sprintf (buffer2, "");
amiraseman 10:7c976b5a5e25 1255 int dispaly2 = sprintf (buffer3, ">>%s", fsmA[state].title);//convert integer to buffer str
amiraseman 19:61eaa5235ccf 1256 int dispaly3 = sprintf (buffer4, "");
amiraseman 19:61eaa5235ccf 1257 int dispaly4 = sprintf (buffer5, "");
amiraseman 1:e60b9f116d38 1258
amiraseman 9:d1691d971f63 1259
amiraseman 9:d1691d971f63 1260
amiraseman 10:7c976b5a5e25 1261 switch (state) {
amiraseman 9:d1691d971f63 1262 case 0:
amiraseman 4:783276521952 1263 if (button4Flag) {
amiraseman 4:783276521952 1264 button4Flag=0;
amiraseman 12:d4011389defe 1265 timerFlag=1;
amiraseman 8:8b810c29eb7b 1266 timer.attach(&timerExpired,1.0);
amiraseman 12:d4011389defe 1267 liveData();
amiraseman 4:783276521952 1268 }
amiraseman 1:e60b9f116d38 1269 break;
amiraseman 9:d1691d971f63 1270 case 1:
amiraseman 8:8b810c29eb7b 1271 if (button4Flag) {
amiraseman 8:8b810c29eb7b 1272 button4Flag=0;
amiraseman 8:8b810c29eb7b 1273 dataLogger();
amiraseman 8:8b810c29eb7b 1274 }
amiraseman 1:e60b9f116d38 1275 break;
amiraseman 9:d1691d971f63 1276 case 2:
amiraseman 9:d1691d971f63 1277 break;
amiraseman 1:e60b9f116d38 1278 case 3:
amiraseman 17:99161153081d 1279 if (button4Flag) {
amiraseman 17:99161153081d 1280 button4Flag=0;
amiraseman 17:99161153081d 1281 alarmsMenu();
amiraseman 17:99161153081d 1282 }
amiraseman 1:e60b9f116d38 1283 break;
amiraseman 1:e60b9f116d38 1284 case 4:
amiraseman 2:1d7ef0f49b35 1285 if (button4Flag) {
amiraseman 2:1d7ef0f49b35 1286 button4Flag=0;
amiraseman 2:1d7ef0f49b35 1287 settingsMenu();
amiraseman 2:1d7ef0f49b35 1288 }
amiraseman 1:e60b9f116d38 1289 break;
amiraseman 1:e60b9f116d38 1290 default:
amiraseman 1:e60b9f116d38 1291 break;
amiraseman 1:e60b9f116d38 1292 }
amiraseman 1:e60b9f116d38 1293 }
amiraseman 1:e60b9f116d38 1294
amiraseman 1:e60b9f116d38 1295
amiraseman 1:e60b9f116d38 1296
amiraseman 2:1d7ef0f49b35 1297
amiraseman 0:d78ac68077c6 1298 int main()
amiraseman 0:d78ac68077c6 1299 {
amiraseman 0:d78ac68077c6 1300
amiraseman 0:d78ac68077c6 1301 // initiliase barometer
amiraseman 0:d78ac68077c6 1302 bmp180.init();
amiraseman 0:d78ac68077c6 1303 lcd.init();
amiraseman 1:e60b9f116d38 1304 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 1305 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 2:1d7ef0f49b35 1306 button3.rise(&button3Pressed);
amiraseman 2:1d7ef0f49b35 1307 button4.rise(&button4Pressed);
amiraseman 8:8b810c29eb7b 1308 dataLoggerTimer.attach(&dataLoggerTimerExpired , dataLoggerTime);
amiraseman 17:99161153081d 1309 //set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 17:99161153081d 1310 redLED.period_us(25);// Set frequency at 40kHz
amiraseman 17:99161153081d 1311 yellowLED.period_us(25);// Set frequency at 40kHz
amiraseman 17:99161153081d 1312 greenLED.period_us(25);// Set frequency at 40kHz
amiraseman 13:213bf5887930 1313 powerSaverCheck();
amiraseman 6:03f12eda070d 1314
amiraseman 0:d78ac68077c6 1315 while(1) {
amiraseman 19:61eaa5235ccf 1316
amiraseman 3:8a559b949470 1317 updateTime();
amiraseman 15:c6f7c4768cf2 1318 loggerData();
amiraseman 1:e60b9f116d38 1319 startMenu();
amiraseman 9:d1691d971f63 1320 display();
amiraseman 4:783276521952 1321 wait (0.1);
amiraseman 0:d78ac68077c6 1322 }
amiraseman 0:d78ac68077c6 1323 }
amiraseman 0:d78ac68077c6 1324
amiraseman 0:d78ac68077c6 1325
amiraseman 0:d78ac68077c6 1326