Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Fri Apr 10 03:09:38 2015 +0000
Revision:
4:783276521952
Parent:
3:8a559b949470
Child:
5:6952998ab446
Time/Date fully functional. brightness setting done but it doesnt work as expected friday 10/4 4:9 am

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