Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Sun May 03 14:35:37 2015 +0000
Revision:
20:ec528f0e63c5
Parent:
19:61eaa5235ccf
Child:
21:d76880ca7499
save to file is done also the saved data option reads the data from the local file and calculates the values using them

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