Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Thu Apr 09 20:40:25 2015 +0000
Revision:
2:1d7ef0f49b35
Parent:
1:e60b9f116d38
Child:
3:8a559b949470
Setting menu done. 9/4/2015 9:40 PM

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 Ticker timer1; //Create ticker object for real time clock
amiraseman 0:d78ac68077c6 19
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 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 0:d78ac68077c6 32
amiraseman 1:e60b9f116d38 33
amiraseman 0:d78ac68077c6 34 char bufferTime[14]; // buffer to store time
amiraseman 0:d78ac68077c6 35 char bufferDate[14]; //buffer to store date
amiraseman 0:d78ac68077c6 36 char bufferT[14];
amiraseman 0:d78ac68077c6 37 char bufferP[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
amiraseman 0:d78ac68077c6 38 // so can display a string of a maximum 14 characters in length
amiraseman 0:d78ac68077c6 39 // or create formatted strings - ensure they aren't more than 14 characters long
amiraseman 0:d78ac68077c6 40
amiraseman 0:d78ac68077c6 41
amiraseman 0:d78ac68077c6 42
amiraseman 1:e60b9f116d38 43 void button1Pressed() //ISR to subtract 1 from the value of choice when the first button is pressed
amiraseman 1:e60b9f116d38 44 {
amiraseman 1:e60b9f116d38 45 choice --;
amiraseman 1:e60b9f116d38 46 if (choice == 0) {
amiraseman 1:e60b9f116d38 47 choice = 5 ;
amiraseman 1:e60b9f116d38 48 }
amiraseman 1:e60b9f116d38 49
amiraseman 1:e60b9f116d38 50 }
amiraseman 1:e60b9f116d38 51
amiraseman 1:e60b9f116d38 52
amiraseman 1:e60b9f116d38 53
amiraseman 1:e60b9f116d38 54 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
amiraseman 1:e60b9f116d38 55 {
amiraseman 1:e60b9f116d38 56 choice ++;
amiraseman 1:e60b9f116d38 57 if (choice == 6) {
amiraseman 1:e60b9f116d38 58 choice = 1 ;
amiraseman 1:e60b9f116d38 59 }
amiraseman 1:e60b9f116d38 60
amiraseman 1:e60b9f116d38 61 }
amiraseman 0:d78ac68077c6 62
amiraseman 0:d78ac68077c6 63
amiraseman 2:1d7ef0f49b35 64
amiraseman 2:1d7ef0f49b35 65 void button3Pressed()
amiraseman 2:1d7ef0f49b35 66 {
amiraseman 2:1d7ef0f49b35 67 button3Flag=1;
amiraseman 2:1d7ef0f49b35 68 }
amiraseman 2:1d7ef0f49b35 69
amiraseman 2:1d7ef0f49b35 70
amiraseman 2:1d7ef0f49b35 71
amiraseman 2:1d7ef0f49b35 72 void button4Pressed()
amiraseman 2:1d7ef0f49b35 73 {
amiraseman 2:1d7ef0f49b35 74 button4Flag = 1 ;
amiraseman 2:1d7ef0f49b35 75 }
amiraseman 2:1d7ef0f49b35 76
amiraseman 2:1d7ef0f49b35 77
amiraseman 2:1d7ef0f49b35 78
amiraseman 2:1d7ef0f49b35 79
amiraseman 2:1d7ef0f49b35 80
amiraseman 0:d78ac68077c6 81 void timer1Expired()
amiraseman 0:d78ac68077c6 82 {
amiraseman 1:e60b9f116d38 83 // set flag
amiraseman 0:d78ac68077c6 84 setTimeFlag = 1;
amiraseman 0:d78ac68077c6 85 }
amiraseman 0:d78ac68077c6 86
amiraseman 0:d78ac68077c6 87
amiraseman 0:d78ac68077c6 88
amiraseman 0:d78ac68077c6 89
amiraseman 0:d78ac68077c6 90 void setTime() // sets the time every second
amiraseman 0:d78ac68077c6 91 {
amiraseman 0:d78ac68077c6 92
amiraseman 0:d78ac68077c6 93 if (setTimeFlag) {
amiraseman 0:d78ac68077c6 94 setTimeFlag=0;
amiraseman 0:d78ac68077c6 95 time_t seconds = time(NULL); // get current time
amiraseman 0:d78ac68077c6 96 // format time into a string (time and date)
amiraseman 1:e60b9f116d38 97 strftime(bufferTime, 14 , "%I:%M", localtime(&seconds));
amiraseman 0:d78ac68077c6 98 strftime(bufferDate, 14 , "%d/%m/%y", localtime(&seconds));
amiraseman 0:d78ac68077c6 99 }
amiraseman 0:d78ac68077c6 100 }
amiraseman 0:d78ac68077c6 101
amiraseman 0:d78ac68077c6 102
amiraseman 0:d78ac68077c6 103
amiraseman 0:d78ac68077c6 104
amiraseman 1:e60b9f116d38 105 void timerExpired() // ISR which sets the timer flag (flag used to display the buffers on LCD)
amiraseman 0:d78ac68077c6 106 {
amiraseman 0:d78ac68077c6 107 timerFlag=1;
amiraseman 0:d78ac68077c6 108 }
amiraseman 0:d78ac68077c6 109
amiraseman 0:d78ac68077c6 110
amiraseman 0:d78ac68077c6 111
amiraseman 1:e60b9f116d38 112 void readData() //Imports the data and saves them to the bufferss
amiraseman 0:d78ac68077c6 113 {
amiraseman 0:d78ac68077c6 114
amiraseman 0:d78ac68077c6 115 Measurement measurement; // measurement structure declared in BMP180 class
amiraseman 0:d78ac68077c6 116
amiraseman 0:d78ac68077c6 117 // read values (T in Celsius and P in mb) and print over serial port
amiraseman 0:d78ac68077c6 118 measurement = bmp180.readValues();
amiraseman 0:d78ac68077c6 119 // serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
amiraseman 0:d78ac68077c6 120
amiraseman 0:d78ac68077c6 121 int temperature = measurement.temperature;
amiraseman 0:d78ac68077c6 122 length = sprintf(bufferT,"T = %0.1d C",temperature); // print formatted data to buffer
amiraseman 0:d78ac68077c6 123 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 0:d78ac68077c6 124
amiraseman 0:d78ac68077c6 125 float pressure = measurement.pressure; // same idea with floats
amiraseman 0:d78ac68077c6 126 length = sprintf(bufferP,"P = %.2f mb",pressure);
amiraseman 0:d78ac68077c6 127
amiraseman 0:d78ac68077c6 128
amiraseman 0:d78ac68077c6 129 }
amiraseman 0:d78ac68077c6 130
amiraseman 0:d78ac68077c6 131
amiraseman 1:e60b9f116d38 132
amiraseman 1:e60b9f116d38 133
amiraseman 1:e60b9f116d38 134 void displayData() //Prints the buffers on the LCD
amiraseman 0:d78ac68077c6 135 {
amiraseman 0:d78ac68077c6 136 if (length <= 14) { // if string will fit on display
amiraseman 0:d78ac68077c6 137 lcd.printString(bufferT,0,1); // display on screen
amiraseman 0:d78ac68077c6 138 lcd.printString(bufferP,0,2);
amiraseman 0:d78ac68077c6 139 lcd.printString(bufferTime,0,3);
amiraseman 0:d78ac68077c6 140 lcd.printString(bufferDate,0,4);
amiraseman 0:d78ac68077c6 141 }
amiraseman 0:d78ac68077c6 142 }
amiraseman 0:d78ac68077c6 143
amiraseman 0:d78ac68077c6 144
amiraseman 1:e60b9f116d38 145
amiraseman 1:e60b9f116d38 146
amiraseman 1:e60b9f116d38 147 void updateData() //
amiraseman 0:d78ac68077c6 148 {
amiraseman 0:d78ac68077c6 149 if (timerFlag) {
amiraseman 0:d78ac68077c6 150 timerFlag=0;
amiraseman 0:d78ac68077c6 151 readData();
amiraseman 0:d78ac68077c6 152 displayData();
amiraseman 0:d78ac68077c6 153 }
amiraseman 0:d78ac68077c6 154 Sleep();
amiraseman 0:d78ac68077c6 155 }
amiraseman 0:d78ac68077c6 156
amiraseman 0:d78ac68077c6 157
amiraseman 2:1d7ef0f49b35 158
amiraseman 2:1d7ef0f49b35 159
amiraseman 2:1d7ef0f49b35 160 void settingsMenu()
amiraseman 2:1d7ef0f49b35 161 {
amiraseman 2:1d7ef0f49b35 162
amiraseman 2:1d7ef0f49b35 163
amiraseman 2:1d7ef0f49b35 164 choice = 1 ;
amiraseman 2:1d7ef0f49b35 165 while(1) {
amiraseman 2:1d7ef0f49b35 166 setTime();
amiraseman 2:1d7ef0f49b35 167 switch (choice) {
amiraseman 2:1d7ef0f49b35 168 case 1:
amiraseman 2:1d7ef0f49b35 169
amiraseman 2:1d7ef0f49b35 170 lcd.clear();
amiraseman 2:1d7ef0f49b35 171 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 172 lcd.printString("Time/Date",10,1);
amiraseman 2:1d7ef0f49b35 173 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 174 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 175 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 176 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 177 lcd.drawCircle(5,12,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 178
amiraseman 2:1d7ef0f49b35 179 // rest of code here
amiraseman 2:1d7ef0f49b35 180 break;
amiraseman 2:1d7ef0f49b35 181 case 2:
amiraseman 2:1d7ef0f49b35 182 lcd.clear();
amiraseman 2:1d7ef0f49b35 183 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 184 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 185 lcd.printString("Units",10,2);
amiraseman 2:1d7ef0f49b35 186 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 187 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 188 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 189 lcd.drawCircle(5,20,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 190 // rest of code here
amiraseman 2:1d7ef0f49b35 191 break;
amiraseman 2:1d7ef0f49b35 192 case 3:
amiraseman 2:1d7ef0f49b35 193 lcd.clear();
amiraseman 2:1d7ef0f49b35 194 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 195 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 196 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 197 lcd.printString("Brightness",10,3);
amiraseman 2:1d7ef0f49b35 198 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 199 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 200 lcd.drawCircle(5,28,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 201 // rest of code here
amiraseman 2:1d7ef0f49b35 202 break;
amiraseman 2:1d7ef0f49b35 203 case 4:
amiraseman 2:1d7ef0f49b35 204 lcd.clear();
amiraseman 2:1d7ef0f49b35 205 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 206 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 207 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 208 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 209 lcd.printString("Power Saver",10,4);
amiraseman 2:1d7ef0f49b35 210 lcd.printString("Log Interval",0,5);
amiraseman 2:1d7ef0f49b35 211 lcd.drawCircle(5,36,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 212 break;
amiraseman 2:1d7ef0f49b35 213 case 5:
amiraseman 2:1d7ef0f49b35 214
amiraseman 2:1d7ef0f49b35 215 lcd.clear();
amiraseman 2:1d7ef0f49b35 216
amiraseman 2:1d7ef0f49b35 217 lcd.printString(bufferTime,48,0);
amiraseman 2:1d7ef0f49b35 218 lcd.printString("Time/Date",0,1);
amiraseman 2:1d7ef0f49b35 219 lcd.printString("Units",0,2);
amiraseman 2:1d7ef0f49b35 220 lcd.printString("Brightness",0,3);
amiraseman 2:1d7ef0f49b35 221 lcd.printString("Power Saver",0,4);
amiraseman 2:1d7ef0f49b35 222 lcd.printString("Log Interval",10,5);
amiraseman 2:1d7ef0f49b35 223 lcd.drawCircle(5,44,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 224 break;
amiraseman 2:1d7ef0f49b35 225 default:
amiraseman 2:1d7ef0f49b35 226 leds = 15;
amiraseman 2:1d7ef0f49b35 227 break;
amiraseman 2:1d7ef0f49b35 228 }
amiraseman 2:1d7ef0f49b35 229 wait (0.5);
amiraseman 2:1d7ef0f49b35 230 if (button3Flag){
amiraseman 2:1d7ef0f49b35 231 button3Flag=0;
amiraseman 2:1d7ef0f49b35 232 break;
amiraseman 2:1d7ef0f49b35 233 }
amiraseman 2:1d7ef0f49b35 234 }
amiraseman 2:1d7ef0f49b35 235 }
amiraseman 2:1d7ef0f49b35 236
amiraseman 2:1d7ef0f49b35 237
amiraseman 1:e60b9f116d38 238 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 239 {
amiraseman 1:e60b9f116d38 240
amiraseman 1:e60b9f116d38 241 switch (choice) {
amiraseman 1:e60b9f116d38 242 case 1:
amiraseman 1:e60b9f116d38 243
amiraseman 1:e60b9f116d38 244 lcd.clear();
amiraseman 1:e60b9f116d38 245 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 246 lcd.printString("Live Data",20,1);
amiraseman 1:e60b9f116d38 247 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 248 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 249 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 250 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 251 lcd.drawCircle(5,12,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 252
amiraseman 1:e60b9f116d38 253 // rest of code here
amiraseman 1:e60b9f116d38 254 break;
amiraseman 1:e60b9f116d38 255 case 2:
amiraseman 1:e60b9f116d38 256 lcd.clear();
amiraseman 1:e60b9f116d38 257 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 258 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 259 lcd.printString("Saved Data",20,2);
amiraseman 1:e60b9f116d38 260 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 261 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 262 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 263 lcd.drawCircle(5,20,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 264 // rest of code here
amiraseman 1:e60b9f116d38 265 break;
amiraseman 1:e60b9f116d38 266 case 3:
amiraseman 1:e60b9f116d38 267 lcd.clear();
amiraseman 1:e60b9f116d38 268 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 269 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 270 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 271 lcd.printString("Forecast",20,3);
amiraseman 1:e60b9f116d38 272 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 273 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 274 lcd.drawCircle(5,28,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 275 // rest of code here
amiraseman 1:e60b9f116d38 276 break;
amiraseman 1:e60b9f116d38 277 case 4:
amiraseman 1:e60b9f116d38 278 lcd.clear();
amiraseman 1:e60b9f116d38 279 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 280 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 281 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 282 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 283 lcd.printString("Alarms",20,4);
amiraseman 1:e60b9f116d38 284 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 285 lcd.drawCircle(5,36,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 286 break;
amiraseman 1:e60b9f116d38 287 case 5:
amiraseman 1:e60b9f116d38 288
amiraseman 1:e60b9f116d38 289 lcd.clear();
amiraseman 1:e60b9f116d38 290 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 291 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 292 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 293 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 294 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 295 lcd.printString("Settings",20,5);
amiraseman 1:e60b9f116d38 296 lcd.drawCircle(5,44,3,1); // x,y,radius,black fill
amiraseman 2:1d7ef0f49b35 297 if (button4Flag) {
amiraseman 2:1d7ef0f49b35 298 button4Flag=0;
amiraseman 2:1d7ef0f49b35 299 settingsMenu();
amiraseman 2:1d7ef0f49b35 300 }
amiraseman 1:e60b9f116d38 301 break;
amiraseman 1:e60b9f116d38 302 default:
amiraseman 1:e60b9f116d38 303 leds = 15;
amiraseman 1:e60b9f116d38 304 break;
amiraseman 1:e60b9f116d38 305 }
amiraseman 1:e60b9f116d38 306 }
amiraseman 1:e60b9f116d38 307
amiraseman 1:e60b9f116d38 308
amiraseman 1:e60b9f116d38 309
amiraseman 2:1d7ef0f49b35 310
amiraseman 2:1d7ef0f49b35 311
amiraseman 0:d78ac68077c6 312 int main()
amiraseman 0:d78ac68077c6 313 {
amiraseman 0:d78ac68077c6 314
amiraseman 0:d78ac68077c6 315 // initiliase barometer
amiraseman 0:d78ac68077c6 316 bmp180.init();
amiraseman 0:d78ac68077c6 317 lcd.init();
amiraseman 0:d78ac68077c6 318 timer.attach(&timerExpired,1.0);
amiraseman 0:d78ac68077c6 319 timer1.attach(&timer1Expired,1.0);
amiraseman 1:e60b9f116d38 320 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 321 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 2:1d7ef0f49b35 322 button3.rise(&button3Pressed);
amiraseman 2:1d7ef0f49b35 323 button4.rise(&button4Pressed);
amiraseman 1:e60b9f116d38 324
amiraseman 0:d78ac68077c6 325 set_time(0); // initialise time to 1st January 1970///// This is where we should set our time
amiraseman 0:d78ac68077c6 326
amiraseman 0:d78ac68077c6 327 while(1) {
amiraseman 0:d78ac68077c6 328 setTime();
amiraseman 1:e60b9f116d38 329 //updateData();
amiraseman 1:e60b9f116d38 330 startMenu();
amiraseman 2:1d7ef0f49b35 331 wait (0.5);
amiraseman 0:d78ac68077c6 332 }
amiraseman 0:d78ac68077c6 333 }
amiraseman 0:d78ac68077c6 334
amiraseman 0:d78ac68077c6 335
amiraseman 0:d78ac68077c6 336