Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Mon Apr 20 21:48:52 2015 +0000
Revision:
9:d1691d971f63
Parent:
8:8b810c29eb7b
Child:
10:7c976b5a5e25
replaced the old start menu and the settings menu with finite state machines

Who changed what in which revision?

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