Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Sun Apr 12 08:36:02 2015 +0000
Revision:
5:6952998ab446
Parent:
4:783276521952
Child:
6:03f12eda070d
Initial commit of the day before coding the new features 9:35 am 4/12/2015

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 0:d78ac68077c6 18
amiraseman 0:d78ac68077c6 19
amiraseman 0:d78ac68077c6 20 int setTimeFlag = 0; // flag for real time clock ISR
amiraseman 0:d78ac68077c6 21 int timerFlag = 0; // Flag for tempesrature pressure reading ISR
amiraseman 1:e60b9f116d38 22 int button1Flag = 0;
amiraseman 1:e60b9f116d38 23 int button2Flag = 0 ;
amiraseman 2:1d7ef0f49b35 24 int button3Flag = 0 ;
amiraseman 2:1d7ef0f49b35 25 int button4Flag = 0 ;
amiraseman 5:6952998ab446 26 int unitFlag = 1 ;
amiraseman 2:1d7ef0f49b35 27
amiraseman 2:1d7ef0f49b35 28
amiraseman 2:1d7ef0f49b35 29
amiraseman 1:e60b9f116d38 30 int choice=1 ;
amiraseman 0:d78ac68077c6 31 int length;
amiraseman 4:783276521952 32 int year=2015;
amiraseman 4:783276521952 33 int month=1;
amiraseman 4:783276521952 34 int day=1;
amiraseman 4:783276521952 35 int hour=12;
amiraseman 4:783276521952 36 int min=0;
amiraseman 4:783276521952 37 int sec=1;
amiraseman 4:783276521952 38 int UNIXdate;
amiraseman 0:d78ac68077c6 39
amiraseman 3:8a559b949470 40 char rxString[16]; //buffer to store recieved string from serial
amiraseman 0:d78ac68077c6 41 char bufferTime[14]; // buffer to store time
amiraseman 0:d78ac68077c6 42 char bufferDate[14]; //buffer to store date
amiraseman 4:783276521952 43 char bufferT[14]; //buffer to store temperature
amiraseman 4:783276521952 44 char bufferP[14]; //buffer to store pressure, each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
amiraseman 0:d78ac68077c6 45 // so can display a string of a maximum 14 characters in length
amiraseman 0:d78ac68077c6 46 // or create formatted strings - ensure they aren't more than 14 characters long
amiraseman 4:783276521952 47 char Year[4];
amiraseman 4:783276521952 48 char Month[12];
amiraseman 4:783276521952 49 char Day[31];
amiraseman 4:783276521952 50 char Hour[24];
amiraseman 4:783276521952 51 char Min[60];
amiraseman 0:d78ac68077c6 52
amiraseman 0:d78ac68077c6 53
amiraseman 3:8a559b949470 54
amiraseman 1:e60b9f116d38 55 void button1Pressed() //ISR to subtract 1 from the value of choice when the first button is pressed
amiraseman 1:e60b9f116d38 56 {
amiraseman 1:e60b9f116d38 57 choice --;
amiraseman 4:783276521952 58 leds = 1;
amiraseman 1:e60b9f116d38 59 }
amiraseman 1:e60b9f116d38 60
amiraseman 1:e60b9f116d38 61
amiraseman 1:e60b9f116d38 62
amiraseman 1:e60b9f116d38 63 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
amiraseman 1:e60b9f116d38 64 {
amiraseman 1:e60b9f116d38 65 choice ++;
amiraseman 4:783276521952 66 leds = 2 ;
amiraseman 1:e60b9f116d38 67 }
amiraseman 0:d78ac68077c6 68
amiraseman 0:d78ac68077c6 69
amiraseman 2:1d7ef0f49b35 70
amiraseman 2:1d7ef0f49b35 71 void button3Pressed()
amiraseman 2:1d7ef0f49b35 72 {
amiraseman 2:1d7ef0f49b35 73 button3Flag=1;
amiraseman 2:1d7ef0f49b35 74 }
amiraseman 2:1d7ef0f49b35 75
amiraseman 2:1d7ef0f49b35 76
amiraseman 2:1d7ef0f49b35 77
amiraseman 2:1d7ef0f49b35 78 void button4Pressed()
amiraseman 2:1d7ef0f49b35 79 {
amiraseman 2:1d7ef0f49b35 80 button4Flag = 1 ;
amiraseman 2:1d7ef0f49b35 81 }
amiraseman 2:1d7ef0f49b35 82
amiraseman 2:1d7ef0f49b35 83
amiraseman 2:1d7ef0f49b35 84
amiraseman 2:1d7ef0f49b35 85
amiraseman 2:1d7ef0f49b35 86
amiraseman 3:8a559b949470 87 void serialISR()
amiraseman 0:d78ac68077c6 88 {
amiraseman 4:783276521952 89 //reads rx string into buffer when a serial interrupt occurs
amiraseman 3:8a559b949470 90 serial.gets(rxString,16);
amiraseman 4:783276521952 91 //set flag
amiraseman 3:8a559b949470 92 setTimeFlag=1;
amiraseman 3:8a559b949470 93 }
amiraseman 4:783276521952 94
amiraseman 4:783276521952 95
amiraseman 3:8a559b949470 96
amiraseman 3:8a559b949470 97 void setTime() // sets the time every second
amiraseman 3:8a559b949470 98 {
amiraseman 4:783276521952 99 //print time for debugging
amiraseman 4:783276521952 100 serial.printf("set_time -%s ",rxString);
amiraseman 3:8a559b949470 101 //atoi() converts a string to an integer
amiraseman 4:783276521952 102 int time = atoi(rxString);
amiraseman 4:783276521952 103 //update the time
amiraseman 4:783276521952 104 set_time(time);
amiraseman 0:d78ac68077c6 105 }
amiraseman 0:d78ac68077c6 106
amiraseman 0:d78ac68077c6 107
amiraseman 0:d78ac68077c6 108
amiraseman 3:8a559b949470 109 void updateTime()
amiraseman 0:d78ac68077c6 110 {
amiraseman 4:783276521952 111 time_t seconds = time(NULL); // get current time
amiraseman 0:d78ac68077c6 112 // format time into a string (time and date)
amiraseman 4:783276521952 113 strftime(bufferTime, 14 , "%I:%M", localtime(&seconds));
amiraseman 4:783276521952 114 strftime(bufferDate, 14 , "%d/%m/%y", localtime(&seconds));
amiraseman 4:783276521952 115
amiraseman 3:8a559b949470 116 if (setTimeFlag) {
amiraseman 3:8a559b949470 117 setTimeFlag=0;
amiraseman 0:d78ac68077c6 118 }
amiraseman 0:d78ac68077c6 119 }
amiraseman 0:d78ac68077c6 120
amiraseman 0:d78ac68077c6 121
amiraseman 1:e60b9f116d38 122 void timerExpired() // ISR which sets the timer flag (flag used to display the buffers on LCD)
amiraseman 0:d78ac68077c6 123 {
amiraseman 0:d78ac68077c6 124 timerFlag=1;
amiraseman 0:d78ac68077c6 125 }
amiraseman 0:d78ac68077c6 126
amiraseman 0:d78ac68077c6 127
amiraseman 0:d78ac68077c6 128
amiraseman 1:e60b9f116d38 129 void readData() //Imports the data and saves them to the bufferss
amiraseman 0:d78ac68077c6 130 {
amiraseman 0:d78ac68077c6 131
amiraseman 0:d78ac68077c6 132 Measurement measurement; // measurement structure declared in BMP180 class
amiraseman 0:d78ac68077c6 133
amiraseman 0:d78ac68077c6 134 // read values (T in Celsius and P in mb) and print over serial port
amiraseman 0:d78ac68077c6 135 measurement = bmp180.readValues();
amiraseman 0:d78ac68077c6 136 // serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
amiraseman 0:d78ac68077c6 137
amiraseman 5:6952998ab446 138 int temperatureC = measurement.temperature;
amiraseman 5:6952998ab446 139 int temperatureF = (temperatureC*(9/5))+32;
amiraseman 5:6952998ab446 140
amiraseman 5:6952998ab446 141 if (unitFlag==1 || unitFlag==2 ){
amiraseman 5:6952998ab446 142 length = sprintf(bufferT,"T = %0.1d C",temperatureC); // print formatted data to buffer
amiraseman 5:6952998ab446 143 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 144 }
amiraseman 5:6952998ab446 145 if (unitFlag==3 || unitFlag==4 ){
amiraseman 5:6952998ab446 146 length = sprintf(bufferT,"T = %0.1d F",temperatureF); // print formatted data to buffer
amiraseman 0:d78ac68077c6 147 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 148 }
amiraseman 0:d78ac68077c6 149
amiraseman 5:6952998ab446 150 float pressureMB = measurement.pressure; // same idea with floats
amiraseman 5:6952998ab446 151 float pressureATM = pressureMB*0.0009869;
amiraseman 5:6952998ab446 152
amiraseman 5:6952998ab446 153
amiraseman 5:6952998ab446 154 if (unitFlag==1 || unitFlag==3 ){
amiraseman 5:6952998ab446 155 length = sprintf(bufferP,"P = %.2f mb",pressureMB); // print formatted data to buffer
amiraseman 5:6952998ab446 156 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 157 }
amiraseman 5:6952998ab446 158 if (unitFlag==2 || unitFlag==4 ){
amiraseman 5:6952998ab446 159 length = sprintf(bufferP,"P = %.2f atm",pressureATM); // print formatted data to buffer
amiraseman 5:6952998ab446 160 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 5:6952998ab446 161 }
amiraseman 0:d78ac68077c6 162
amiraseman 0:d78ac68077c6 163
amiraseman 0:d78ac68077c6 164 }
amiraseman 0:d78ac68077c6 165
amiraseman 0:d78ac68077c6 166
amiraseman 1:e60b9f116d38 167
amiraseman 1:e60b9f116d38 168
amiraseman 1:e60b9f116d38 169 void displayData() //Prints the buffers on the LCD
amiraseman 0:d78ac68077c6 170 {
amiraseman 4:783276521952 171 lcd.clear();
amiraseman 0:d78ac68077c6 172 if (length <= 14) { // if string will fit on display
amiraseman 0:d78ac68077c6 173 lcd.printString(bufferT,0,1); // display on screen
amiraseman 0:d78ac68077c6 174 lcd.printString(bufferP,0,2);
amiraseman 0:d78ac68077c6 175 lcd.printString(bufferTime,0,3);
amiraseman 0:d78ac68077c6 176 lcd.printString(bufferDate,0,4);
amiraseman 0:d78ac68077c6 177 }
amiraseman 0:d78ac68077c6 178 }
amiraseman 0:d78ac68077c6 179
amiraseman 0:d78ac68077c6 180
amiraseman 1:e60b9f116d38 181
amiraseman 1:e60b9f116d38 182
amiraseman 1:e60b9f116d38 183 void updateData() //
amiraseman 0:d78ac68077c6 184 {
amiraseman 4:783276521952 185 while (1) {
amiraseman 4:783276521952 186 if (timerFlag) {
amiraseman 4:783276521952 187 timerFlag=0;
amiraseman 4:783276521952 188 readData();
amiraseman 4:783276521952 189 displayData();
amiraseman 4:783276521952 190 }
amiraseman 4:783276521952 191 if (button3Flag) {
amiraseman 4:783276521952 192 button3Flag = 0;
amiraseman 4:783276521952 193 break;
amiraseman 4:783276521952 194 }
amiraseman 4:783276521952 195 Sleep();
amiraseman 0:d78ac68077c6 196 }
amiraseman 4:783276521952 197 }
amiraseman 4:783276521952 198
amiraseman 4:783276521952 199
amiraseman 4:783276521952 200 void calculateUNIXTime()
amiraseman 4:783276521952 201 {
amiraseman 4:783276521952 202 time_t rawtime;
amiraseman 4:783276521952 203 struct tm * timeinfo;
amiraseman 4:783276521952 204
amiraseman 4:783276521952 205 /* get current timeinfo: */
amiraseman 4:783276521952 206 time ( &rawtime ); //or: rawtime = time(0);
amiraseman 4:783276521952 207 /* convert to struct: */
amiraseman 4:783276521952 208 timeinfo = localtime ( &rawtime );
amiraseman 4:783276521952 209
amiraseman 4:783276521952 210 /* now modify the timeinfo to the given date: */
amiraseman 4:783276521952 211 timeinfo->tm_year = year - 1900;
amiraseman 4:783276521952 212 timeinfo->tm_mon = month - 1; //months since January - [0,11]
amiraseman 4:783276521952 213 timeinfo->tm_mday = day; //day of the month - [1,31]
amiraseman 4:783276521952 214 timeinfo->tm_hour = hour; //hours since midnight - [0,23]
amiraseman 4:783276521952 215 timeinfo->tm_min = min; //minutes after the hour - [0,59]
amiraseman 4:783276521952 216 timeinfo->tm_sec = sec; //seconds after the minute - [0,59]
amiraseman 4:783276521952 217
amiraseman 4:783276521952 218 /* call mktime: create unix time stamp from timeinfo struct */
amiraseman 4:783276521952 219 UNIXdate = mktime ( timeinfo );
amiraseman 4:783276521952 220
amiraseman 4:783276521952 221 }
amiraseman 4:783276521952 222
amiraseman 5:6952998ab446 223
amiraseman 5:6952998ab446 224
amiraseman 5:6952998ab446 225
amiraseman 5:6952998ab446 226 void unitsSetting()
amiraseman 5:6952998ab446 227 {
amiraseman 5:6952998ab446 228 choice = 1;
amiraseman 5:6952998ab446 229
amiraseman 5:6952998ab446 230 while (1) {
amiraseman 5:6952998ab446 231
amiraseman 5:6952998ab446 232
amiraseman 5:6952998ab446 233
amiraseman 5:6952998ab446 234 if (choice < 1) {
amiraseman 5:6952998ab446 235 choice = 4;
amiraseman 5:6952998ab446 236 }
amiraseman 5:6952998ab446 237 if (choice > 4) {
amiraseman 5:6952998ab446 238 choice = 1;
amiraseman 5:6952998ab446 239 }
amiraseman 5:6952998ab446 240
amiraseman 5:6952998ab446 241
amiraseman 5:6952998ab446 242
amiraseman 5:6952998ab446 243 switch (choice) {
amiraseman 5:6952998ab446 244 case 1:
amiraseman 5:6952998ab446 245
amiraseman 5:6952998ab446 246 lcd.clear();
amiraseman 5:6952998ab446 247 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 248 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 249 lcd.printString("C/mb",0,3);
amiraseman 5:6952998ab446 250 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 251
amiraseman 5:6952998ab446 252 if (button4Flag) {
amiraseman 5:6952998ab446 253 button4Flag=0;
amiraseman 5:6952998ab446 254 unitFlag=1;
amiraseman 5:6952998ab446 255 }
amiraseman 5:6952998ab446 256
amiraseman 5:6952998ab446 257
amiraseman 5:6952998ab446 258 break;
amiraseman 5:6952998ab446 259 case 2:
amiraseman 5:6952998ab446 260 lcd.clear();
amiraseman 5:6952998ab446 261 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 262 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 263 lcd.printString("C/atm",0,3);
amiraseman 5:6952998ab446 264 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 265 if (button4Flag) {
amiraseman 5:6952998ab446 266 button4Flag=0;
amiraseman 5:6952998ab446 267 unitFlag=2;
amiraseman 5:6952998ab446 268 }
amiraseman 5:6952998ab446 269 break;
amiraseman 5:6952998ab446 270 case 3:
amiraseman 5:6952998ab446 271 lcd.clear();
amiraseman 5:6952998ab446 272 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 273 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 274 lcd.printString("F/mb",0,3);
amiraseman 5:6952998ab446 275 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 276 if (button4Flag) {
amiraseman 5:6952998ab446 277 button4Flag = 0;
amiraseman 5:6952998ab446 278 unitFlag=3;
amiraseman 5:6952998ab446 279 }
amiraseman 5:6952998ab446 280 break;
amiraseman 5:6952998ab446 281 case 4:
amiraseman 5:6952998ab446 282 lcd.clear();
amiraseman 5:6952998ab446 283 lcd.printString(bufferTime,48,0);
amiraseman 5:6952998ab446 284 lcd.printString("Units : ",0,2);
amiraseman 5:6952998ab446 285 lcd.printString("F/atm",0,3);
amiraseman 5:6952998ab446 286 lcd.printString("Back Save",0,5);
amiraseman 5:6952998ab446 287 if (button4Flag) {
amiraseman 5:6952998ab446 288 button4Flag=0;
amiraseman 5:6952998ab446 289 unitFlag=4;
amiraseman 5:6952998ab446 290 }
amiraseman 5:6952998ab446 291 break;
amiraseman 5:6952998ab446 292 default:
amiraseman 5:6952998ab446 293 break;
amiraseman 5:6952998ab446 294
amiraseman 5:6952998ab446 295 }
amiraseman 5:6952998ab446 296 wait (0.1);
amiraseman 5:6952998ab446 297 if (button3Flag) {
amiraseman 5:6952998ab446 298 button3Flag=0;
amiraseman 5:6952998ab446 299 break;
amiraseman 5:6952998ab446 300 }
amiraseman 5:6952998ab446 301 }
amiraseman 5:6952998ab446 302 }
amiraseman 5:6952998ab446 303
amiraseman 5:6952998ab446 304
amiraseman 5:6952998ab446 305
amiraseman 5:6952998ab446 306
amiraseman 5:6952998ab446 307
amiraseman 4:783276521952 308 void brightnessSetting ()
amiraseman 4:783276521952 309 {
amiraseman 4:783276521952 310 lcd.clear();
amiraseman 4:783276521952 311 while(1) {
amiraseman 5:6952998ab446 312 lcd.clear();
amiraseman 5:6952998ab446 313 lcd.refresh();
amiraseman 5:6952998ab446 314 if (choice < 1) {
amiraseman 5:6952998ab446 315 choice = 6 ;
amiraseman 5:6952998ab446 316 }
amiraseman 5:6952998ab446 317 if (choice > 6) {
amiraseman 4:783276521952 318 choice = 1;
amiraseman 4:783276521952 319 }
amiraseman 5:6952998ab446 320
amiraseman 5:6952998ab446 321
amiraseman 5:6952998ab446 322 if (button4Flag) {
amiraseman 5:6952998ab446 323 button4Flag=0;
amiraseman 5:6952998ab446 324 lcd.setBrightness(choice/10);
amiraseman 5:6952998ab446 325 }
amiraseman 5:6952998ab446 326
amiraseman 4:783276521952 327 if (button3Flag) {
amiraseman 4:783276521952 328 button3Flag=0;
amiraseman 4:783276521952 329 break;
amiraseman 4:783276521952 330 }
amiraseman 4:783276521952 331 }
amiraseman 0:d78ac68077c6 332 }
amiraseman 0:d78ac68077c6 333
amiraseman 0:d78ac68077c6 334
amiraseman 2:1d7ef0f49b35 335
amiraseman 4:783276521952 336 void timeDateSetting()
amiraseman 3:8a559b949470 337 {
amiraseman 3:8a559b949470 338
amiraseman 4:783276521952 339 choice = 1 ;
amiraseman 4:783276521952 340 while (1) {
amiraseman 4:783276521952 341
amiraseman 4:783276521952 342 if (choice > 6) {
amiraseman 4:783276521952 343 choice = 1 ;
amiraseman 4:783276521952 344 }
amiraseman 4:783276521952 345 if (choice < 1) {
amiraseman 4:783276521952 346 choice = 6 ;
amiraseman 4:783276521952 347 }
amiraseman 4:783276521952 348
amiraseman 3:8a559b949470 349
amiraseman 4:783276521952 350 //convert integers to strings to display on the LCD
amiraseman 4:783276521952 351 int y = sprintf (Year, "Year : %d", year);//convert integer to buffer str
amiraseman 4:783276521952 352 int m = sprintf (Month, "Month : %d", month);//convert integer to buffer str
amiraseman 4:783276521952 353 int d = sprintf (Day, "Day : %d", day);//convert integer to buffer str
amiraseman 4:783276521952 354 int h = sprintf (Hour, "Hour : %d", hour);//convert integer to buffer str
amiraseman 4:783276521952 355 int mi = sprintf (Min, "Min : %d", min);//convert integer to buffer str
amiraseman 3:8a559b949470 356
amiraseman 4:783276521952 357
amiraseman 4:783276521952 358 switch (choice) {
amiraseman 4:783276521952 359 case 1:
amiraseman 3:8a559b949470 360
amiraseman 4:783276521952 361 lcd.clear();
amiraseman 4:783276521952 362 lcd.printString(Hour,10,0);
amiraseman 4:783276521952 363 lcd.printString(Min,0,1);
amiraseman 4:783276521952 364 lcd.printString(Day,0,2);
amiraseman 4:783276521952 365 lcd.printString(Month,0,3);
amiraseman 4:783276521952 366 lcd.printString(Year,0,4);
amiraseman 4:783276521952 367 lcd.printString("Back Save",0,5);
amiraseman 4:783276521952 368 lcd.drawCircle(5,4,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 369 if (button3Flag) {
amiraseman 4:783276521952 370 button3Flag= 0;
amiraseman 4:783276521952 371 hour--;
amiraseman 4:783276521952 372 }
amiraseman 4:783276521952 373 if (button4Flag) {
amiraseman 4:783276521952 374 button4Flag= 0;
amiraseman 4:783276521952 375 hour++;
amiraseman 4:783276521952 376 }
amiraseman 3:8a559b949470 377
amiraseman 4:783276521952 378 break;
amiraseman 4:783276521952 379 case 2:
amiraseman 4:783276521952 380 lcd.clear();
amiraseman 4:783276521952 381 lcd.printString(Hour,0,0);
amiraseman 4:783276521952 382 lcd.printString(Min,10,1);
amiraseman 4:783276521952 383 lcd.printString(Day,0,2);
amiraseman 4:783276521952 384 lcd.printString(Month,0,3);
amiraseman 4:783276521952 385 lcd.printString(Year,0,4);
amiraseman 4:783276521952 386 lcd.printString("Back Save",0,5);
amiraseman 4:783276521952 387 lcd.drawCircle(5,12,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 388 if (button3Flag) {
amiraseman 4:783276521952 389 button3Flag= 0;
amiraseman 4:783276521952 390 min--;
amiraseman 4:783276521952 391 }
amiraseman 4:783276521952 392 if (button4Flag) {
amiraseman 4:783276521952 393 button4Flag= 0;
amiraseman 4:783276521952 394 min++;
amiraseman 4:783276521952 395 }
amiraseman 4:783276521952 396 break;
amiraseman 4:783276521952 397 case 3:
amiraseman 4:783276521952 398 lcd.clear();
amiraseman 4:783276521952 399 lcd.printString(Hour,0,0);
amiraseman 4:783276521952 400 lcd.printString(Min,0,1);
amiraseman 4:783276521952 401 lcd.printString(Day,10,2);
amiraseman 4:783276521952 402 lcd.printString(Month,0,3);
amiraseman 4:783276521952 403 lcd.printString(Year,0,4);
amiraseman 4:783276521952 404 lcd.printString("Back Save",0,5);
amiraseman 4:783276521952 405 lcd.drawCircle(5,20,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 406 if (button3Flag) {
amiraseman 4:783276521952 407 button3Flag= 0;
amiraseman 4:783276521952 408 day--;
amiraseman 4:783276521952 409 }
amiraseman 4:783276521952 410 if (button4Flag) {
amiraseman 4:783276521952 411 button4Flag= 0;
amiraseman 4:783276521952 412 day++;
amiraseman 4:783276521952 413 }
amiraseman 4:783276521952 414 break;
amiraseman 4:783276521952 415 case 4:
amiraseman 4:783276521952 416 lcd.clear();
amiraseman 4:783276521952 417 lcd.printString(Hour,0,0);
amiraseman 4:783276521952 418 lcd.printString(Min,0,1);
amiraseman 4:783276521952 419 lcd.printString(Day,0,2);
amiraseman 4:783276521952 420 lcd.printString(Month,10,3);
amiraseman 4:783276521952 421 lcd.printString(Year,0,4);
amiraseman 4:783276521952 422 lcd.printString("Back Save",0,5);
amiraseman 4:783276521952 423 lcd.drawCircle(5,28,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 424 if (button3Flag) {
amiraseman 4:783276521952 425 button3Flag= 0;
amiraseman 4:783276521952 426 month--;
amiraseman 4:783276521952 427 }
amiraseman 4:783276521952 428 if (button4Flag) {
amiraseman 4:783276521952 429 button4Flag= 0;
amiraseman 4:783276521952 430 month++;
amiraseman 4:783276521952 431 }
amiraseman 4:783276521952 432 break;
amiraseman 4:783276521952 433 case 5:
amiraseman 3:8a559b949470 434
amiraseman 4:783276521952 435 lcd.clear();
amiraseman 4:783276521952 436 lcd.printString(Hour,0,0);
amiraseman 4:783276521952 437 lcd.printString(Min,0,1);
amiraseman 4:783276521952 438 lcd.printString(Day,0,2);
amiraseman 4:783276521952 439 lcd.printString(Month,0,3);
amiraseman 4:783276521952 440 lcd.printString(Year,10,4);
amiraseman 4:783276521952 441 lcd.printString("Back Save",0,5);
amiraseman 4:783276521952 442 lcd.drawCircle(5,36,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 443 if (button3Flag) {
amiraseman 4:783276521952 444 button3Flag= 0;
amiraseman 4:783276521952 445 year--;
amiraseman 4:783276521952 446 }
amiraseman 4:783276521952 447 if (button4Flag) {
amiraseman 4:783276521952 448 button4Flag= 0;
amiraseman 4:783276521952 449 year++;
amiraseman 4:783276521952 450 }
amiraseman 4:783276521952 451 break;
amiraseman 4:783276521952 452 case 6:
amiraseman 4:783276521952 453
amiraseman 4:783276521952 454 lcd.clear();
amiraseman 4:783276521952 455 lcd.printString(Hour,0,0);
amiraseman 4:783276521952 456 lcd.printString(Min,0,1);
amiraseman 4:783276521952 457 lcd.printString(Day,0,2);
amiraseman 4:783276521952 458 lcd.printString(Month,0,3);
amiraseman 4:783276521952 459 lcd.printString(Year,0,4);
amiraseman 4:783276521952 460 lcd.printString("Back Save",0,5);
amiraseman 4:783276521952 461 lcd.drawCircle(40,44,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 462 if (button4Flag) {
amiraseman 4:783276521952 463 button4Flag=0;
amiraseman 4:783276521952 464 calculateUNIXTime();
amiraseman 4:783276521952 465 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 4:783276521952 466 serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
amiraseman 4:783276521952 467 }
amiraseman 4:783276521952 468 if (button3Flag) {
amiraseman 4:783276521952 469 button3Flag=0;
amiraseman 4:783276521952 470 goto exit_loop;
amiraseman 4:783276521952 471 }
amiraseman 4:783276521952 472 break;
amiraseman 4:783276521952 473 default:
amiraseman 4:783276521952 474 break;
amiraseman 4:783276521952 475 }
amiraseman 5:6952998ab446 476 wait (0.1);
amiraseman 3:8a559b949470 477 }
amiraseman 4:783276521952 478 exit_loop:
amiraseman 4:783276521952 479 ;
amiraseman 3:8a559b949470 480 }
amiraseman 3:8a559b949470 481
amiraseman 3:8a559b949470 482
amiraseman 3:8a559b949470 483
amiraseman 2:1d7ef0f49b35 484
amiraseman 2:1d7ef0f49b35 485 void settingsMenu()
amiraseman 2:1d7ef0f49b35 486 {
amiraseman 2:1d7ef0f49b35 487
amiraseman 2:1d7ef0f49b35 488
amiraseman 2:1d7ef0f49b35 489 choice = 1 ;
amiraseman 2:1d7ef0f49b35 490 while(1) {
amiraseman 4:783276521952 491 if (choice > 5) {
amiraseman 4:783276521952 492 choice = 1 ;
amiraseman 4:783276521952 493 }
amiraseman 4:783276521952 494 if (choice < 1) {
amiraseman 4:783276521952 495 choice = 5 ;
amiraseman 4:783276521952 496 }
amiraseman 3:8a559b949470 497 updateTime();
amiraseman 2:1d7ef0f49b35 498 switch (choice) {
amiraseman 2:1d7ef0f49b35 499 case 1:
amiraseman 2:1d7ef0f49b35 500
amiraseman 2:1d7ef0f49b35 501 lcd.clear();
amiraseman 2:1d7ef0f49b35 502 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 503 lcd.printString("Time/Date",10,1);
amiraseman 2:1d7ef0f49b35 504 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 505 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 506 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 507 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 508 lcd.drawCircle(5,12,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 509
amiraseman 4:783276521952 510 if (button4Flag) {
amiraseman 4:783276521952 511 button4Flag=0;
amiraseman 4:783276521952 512 timeDateSetting();
amiraseman 4:783276521952 513 }
amiraseman 4:783276521952 514
amiraseman 4:783276521952 515
amiraseman 2:1d7ef0f49b35 516 break;
amiraseman 2:1d7ef0f49b35 517 case 2:
amiraseman 2:1d7ef0f49b35 518 lcd.clear();
amiraseman 2:1d7ef0f49b35 519 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 520 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 521 lcd.printString("Units",10,2);
amiraseman 2:1d7ef0f49b35 522 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 523 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 524 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 525 lcd.drawCircle(5,20,3,1); // x,y,radius,black fill
amiraseman 5:6952998ab446 526
amiraseman 5:6952998ab446 527 if (button4Flag) {
amiraseman 5:6952998ab446 528 button4Flag=0;
amiraseman 5:6952998ab446 529 unitsSetting();
amiraseman 5:6952998ab446 530 }
amiraseman 5:6952998ab446 531
amiraseman 2:1d7ef0f49b35 532 break;
amiraseman 2:1d7ef0f49b35 533 case 3:
amiraseman 2:1d7ef0f49b35 534 lcd.clear();
amiraseman 2:1d7ef0f49b35 535 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 536 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 537 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 538 lcd.printString("Brightness",10,3);
amiraseman 2:1d7ef0f49b35 539 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 540 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 541 lcd.drawCircle(5,28,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 542 if (button4Flag) {
amiraseman 4:783276521952 543 button4Flag = 0;
amiraseman 4:783276521952 544 brightnessSetting();
amiraseman 4:783276521952 545 }
amiraseman 2:1d7ef0f49b35 546 break;
amiraseman 2:1d7ef0f49b35 547 case 4:
amiraseman 2:1d7ef0f49b35 548 lcd.clear();
amiraseman 2:1d7ef0f49b35 549 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 550 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 551 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 552 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 553 lcd.printString("Power Saver",10,4);
amiraseman 2:1d7ef0f49b35 554 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 555 lcd.drawCircle(5,36,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 556
amiraseman 2:1d7ef0f49b35 557 break;
amiraseman 2:1d7ef0f49b35 558 case 5:
amiraseman 2:1d7ef0f49b35 559
amiraseman 2:1d7ef0f49b35 560 lcd.clear();
amiraseman 2:1d7ef0f49b35 561
amiraseman 2:1d7ef0f49b35 562 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 563 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 564 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 565 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 566 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 567 lcd.printString("Log Interval",10,5);
amiraseman 2:1d7ef0f49b35 568 lcd.drawCircle(5,44,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 569 break;
amiraseman 4:783276521952 570 case 6:
amiraseman 4:783276521952 571
amiraseman 4:783276521952 572 lcd.clear();
amiraseman 4:783276521952 573 choice = 1;
amiraseman 4:783276521952 574 break;
amiraseman 2:1d7ef0f49b35 575 default:
amiraseman 2:1d7ef0f49b35 576 leds = 15;
amiraseman 2:1d7ef0f49b35 577 break;
amiraseman 2:1d7ef0f49b35 578 }
amiraseman 4:783276521952 579 if (button3Flag) {
amiraseman 2:1d7ef0f49b35 580 button3Flag=0;
amiraseman 2:1d7ef0f49b35 581 break;
amiraseman 4:783276521952 582 }
amiraseman 5:6952998ab446 583 wait (0.1);
amiraseman 2:1d7ef0f49b35 584 }
amiraseman 2:1d7ef0f49b35 585 }
amiraseman 2:1d7ef0f49b35 586
amiraseman 2:1d7ef0f49b35 587
amiraseman 5:6952998ab446 588 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 589 {
amiraseman 1:e60b9f116d38 590
amiraseman 1:e60b9f116d38 591 switch (choice) {
amiraseman 1:e60b9f116d38 592 case 1:
amiraseman 1:e60b9f116d38 593
amiraseman 1:e60b9f116d38 594 lcd.clear();
amiraseman 1:e60b9f116d38 595 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 596 lcd.printString("Live Data",20,1);
amiraseman 1:e60b9f116d38 597 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 598 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 599 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 600 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 601 lcd.drawCircle(5,12,3,1); // x,y,radius,black fill
amiraseman 4:783276521952 602 if (button4Flag) {
amiraseman 4:783276521952 603 button4Flag=0;
amiraseman 4:783276521952 604 updateData();
amiraseman 4:783276521952 605 }
amiraseman 1:e60b9f116d38 606
amiraseman 1:e60b9f116d38 607 // rest of code here
amiraseman 1:e60b9f116d38 608 break;
amiraseman 1:e60b9f116d38 609 case 2:
amiraseman 1:e60b9f116d38 610 lcd.clear();
amiraseman 1:e60b9f116d38 611 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 612 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 613 lcd.printString("Saved Data",20,2);
amiraseman 1:e60b9f116d38 614 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 615 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 616 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 617 lcd.drawCircle(5,20,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 618 // rest of code here
amiraseman 1:e60b9f116d38 619 break;
amiraseman 1:e60b9f116d38 620 case 3:
amiraseman 1:e60b9f116d38 621 lcd.clear();
amiraseman 1:e60b9f116d38 622 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 623 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 624 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 625 lcd.printString("Forecast",20,3);
amiraseman 1:e60b9f116d38 626 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 627 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 628 lcd.drawCircle(5,28,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 629 // rest of code here
amiraseman 1:e60b9f116d38 630 break;
amiraseman 1:e60b9f116d38 631 case 4:
amiraseman 1:e60b9f116d38 632 lcd.clear();
amiraseman 1:e60b9f116d38 633 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 634 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 635 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 636 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 637 lcd.printString("Alarms",20,4);
amiraseman 1:e60b9f116d38 638 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 639 lcd.drawCircle(5,36,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 640 break;
amiraseman 1:e60b9f116d38 641 case 5:
amiraseman 1:e60b9f116d38 642
amiraseman 1:e60b9f116d38 643 lcd.clear();
amiraseman 1:e60b9f116d38 644 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 645 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 646 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 647 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 648 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 649 lcd.printString("Settings",20,5);
amiraseman 1:e60b9f116d38 650 lcd.drawCircle(5,44,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 651 if (button4Flag) {
amiraseman 2:1d7ef0f49b35 652 button4Flag=0;
amiraseman 2:1d7ef0f49b35 653 settingsMenu();
amiraseman 2:1d7ef0f49b35 654 }
amiraseman 1:e60b9f116d38 655 break;
amiraseman 4:783276521952 656 case 6:
amiraseman 4:783276521952 657
amiraseman 4:783276521952 658 lcd.clear();
amiraseman 4:783276521952 659 choice = 1;
amiraseman 4:783276521952 660 break;
amiraseman 1:e60b9f116d38 661 default:
amiraseman 1:e60b9f116d38 662 leds = 15;
amiraseman 1:e60b9f116d38 663 break;
amiraseman 1:e60b9f116d38 664 }
amiraseman 1:e60b9f116d38 665 }
amiraseman 1:e60b9f116d38 666
amiraseman 1:e60b9f116d38 667
amiraseman 1:e60b9f116d38 668
amiraseman 2:1d7ef0f49b35 669
amiraseman 2:1d7ef0f49b35 670
amiraseman 0:d78ac68077c6 671 int main()
amiraseman 0:d78ac68077c6 672 {
amiraseman 0:d78ac68077c6 673
amiraseman 0:d78ac68077c6 674 // initiliase barometer
amiraseman 0:d78ac68077c6 675 bmp180.init();
amiraseman 0:d78ac68077c6 676 lcd.init();
amiraseman 0:d78ac68077c6 677 timer.attach(&timerExpired,1.0);
amiraseman 3:8a559b949470 678 serial.attach(&serialISR);
amiraseman 1:e60b9f116d38 679 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 680 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 2:1d7ef0f49b35 681 button3.rise(&button3Pressed);
amiraseman 2:1d7ef0f49b35 682 button4.rise(&button4Pressed);
amiraseman 1:e60b9f116d38 683
amiraseman 4:783276521952 684 set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
amiraseman 0:d78ac68077c6 685
amiraseman 0:d78ac68077c6 686 while(1) {
amiraseman 4:783276521952 687
amiraseman 4:783276521952 688 if (choice > 5) {
amiraseman 4:783276521952 689 choice = 1 ;
amiraseman 4:783276521952 690 }
amiraseman 4:783276521952 691 if (choice < 1) {
amiraseman 4:783276521952 692 choice = 5 ;
amiraseman 4:783276521952 693 }
amiraseman 3:8a559b949470 694 updateTime();
amiraseman 1:e60b9f116d38 695 startMenu();
amiraseman 4:783276521952 696 wait (0.1);
amiraseman 0:d78ac68077c6 697 }
amiraseman 0:d78ac68077c6 698 }
amiraseman 0:d78ac68077c6 699
amiraseman 0:d78ac68077c6 700
amiraseman 0:d78ac68077c6 701