Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Tue May 05 12:00:48 2015 +0000
Revision:
21:d76880ca7499
Parent:
20:ec528f0e63c5
Child:
22:f3dfa2a4e79a
first commit of the day before starting;

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