Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Thu Apr 09 18:59:44 2015 +0000
Revision:
1:e60b9f116d38
Parent:
0:d78ac68077c6
Child:
2:1d7ef0f49b35
Start menu completed 9/4/2015 8:00PM

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 1:e60b9f116d38 13
amiraseman 1:e60b9f116d38 14
amiraseman 0:d78ac68077c6 15
amiraseman 0:d78ac68077c6 16 Ticker timer; //Create ticker object for temperature and pressure readings
amiraseman 0:d78ac68077c6 17 Ticker timer1; //Create ticker object for real time clock
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 1:e60b9f116d38 24 int choice=1 ;
amiraseman 0:d78ac68077c6 25 int length;
amiraseman 0:d78ac68077c6 26
amiraseman 1:e60b9f116d38 27
amiraseman 0:d78ac68077c6 28 char bufferTime[14]; // buffer to store time
amiraseman 0:d78ac68077c6 29 char bufferDate[14]; //buffer to store date
amiraseman 0:d78ac68077c6 30 char bufferT[14];
amiraseman 0:d78ac68077c6 31 char bufferP[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
amiraseman 0:d78ac68077c6 32 // so can display a string of a maximum 14 characters in length
amiraseman 0:d78ac68077c6 33 // or create formatted strings - ensure they aren't more than 14 characters long
amiraseman 0:d78ac68077c6 34
amiraseman 0:d78ac68077c6 35
amiraseman 0:d78ac68077c6 36
amiraseman 1:e60b9f116d38 37 void button1Pressed() //ISR to subtract 1 from the value of choice when the first button is pressed
amiraseman 1:e60b9f116d38 38 {
amiraseman 1:e60b9f116d38 39 choice --;
amiraseman 1:e60b9f116d38 40 if (choice == 0) {
amiraseman 1:e60b9f116d38 41 choice = 5 ;
amiraseman 1:e60b9f116d38 42 }
amiraseman 1:e60b9f116d38 43
amiraseman 1:e60b9f116d38 44 }
amiraseman 1:e60b9f116d38 45
amiraseman 1:e60b9f116d38 46
amiraseman 1:e60b9f116d38 47
amiraseman 1:e60b9f116d38 48 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
amiraseman 1:e60b9f116d38 49 {
amiraseman 1:e60b9f116d38 50 choice ++;
amiraseman 1:e60b9f116d38 51 if (choice == 6) {
amiraseman 1:e60b9f116d38 52 choice = 1 ;
amiraseman 1:e60b9f116d38 53 }
amiraseman 1:e60b9f116d38 54
amiraseman 1:e60b9f116d38 55 }
amiraseman 0:d78ac68077c6 56
amiraseman 0:d78ac68077c6 57
amiraseman 0:d78ac68077c6 58 void timer1Expired()
amiraseman 0:d78ac68077c6 59 {
amiraseman 1:e60b9f116d38 60 // set flag
amiraseman 0:d78ac68077c6 61 setTimeFlag = 1;
amiraseman 0:d78ac68077c6 62 }
amiraseman 0:d78ac68077c6 63
amiraseman 0:d78ac68077c6 64
amiraseman 0:d78ac68077c6 65
amiraseman 0:d78ac68077c6 66
amiraseman 0:d78ac68077c6 67 void setTime() // sets the time every second
amiraseman 0:d78ac68077c6 68 {
amiraseman 0:d78ac68077c6 69
amiraseman 0:d78ac68077c6 70 if (setTimeFlag) {
amiraseman 0:d78ac68077c6 71 setTimeFlag=0;
amiraseman 0:d78ac68077c6 72 time_t seconds = time(NULL); // get current time
amiraseman 0:d78ac68077c6 73 // format time into a string (time and date)
amiraseman 1:e60b9f116d38 74 strftime(bufferTime, 14 , "%I:%M", localtime(&seconds));
amiraseman 0:d78ac68077c6 75 strftime(bufferDate, 14 , "%d/%m/%y", localtime(&seconds));
amiraseman 0:d78ac68077c6 76 }
amiraseman 0:d78ac68077c6 77 }
amiraseman 0:d78ac68077c6 78
amiraseman 0:d78ac68077c6 79
amiraseman 0:d78ac68077c6 80
amiraseman 0:d78ac68077c6 81
amiraseman 1:e60b9f116d38 82 void timerExpired() // ISR which sets the timer flag (flag used to display the buffers on LCD)
amiraseman 0:d78ac68077c6 83 {
amiraseman 0:d78ac68077c6 84 timerFlag=1;
amiraseman 0:d78ac68077c6 85 }
amiraseman 0:d78ac68077c6 86
amiraseman 0:d78ac68077c6 87
amiraseman 0:d78ac68077c6 88
amiraseman 1:e60b9f116d38 89 void readData() //Imports the data and saves them to the bufferss
amiraseman 0:d78ac68077c6 90 {
amiraseman 0:d78ac68077c6 91
amiraseman 0:d78ac68077c6 92 Measurement measurement; // measurement structure declared in BMP180 class
amiraseman 0:d78ac68077c6 93
amiraseman 0:d78ac68077c6 94 // read values (T in Celsius and P in mb) and print over serial port
amiraseman 0:d78ac68077c6 95 measurement = bmp180.readValues();
amiraseman 0:d78ac68077c6 96 // serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
amiraseman 0:d78ac68077c6 97
amiraseman 0:d78ac68077c6 98 int temperature = measurement.temperature;
amiraseman 0:d78ac68077c6 99 length = sprintf(bufferT,"T = %0.1d C",temperature); // print formatted data to buffer
amiraseman 0:d78ac68077c6 100 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 0:d78ac68077c6 101
amiraseman 0:d78ac68077c6 102 float pressure = measurement.pressure; // same idea with floats
amiraseman 0:d78ac68077c6 103 length = sprintf(bufferP,"P = %.2f mb",pressure);
amiraseman 0:d78ac68077c6 104
amiraseman 0:d78ac68077c6 105
amiraseman 0:d78ac68077c6 106 }
amiraseman 0:d78ac68077c6 107
amiraseman 0:d78ac68077c6 108
amiraseman 1:e60b9f116d38 109
amiraseman 1:e60b9f116d38 110
amiraseman 1:e60b9f116d38 111 void displayData() //Prints the buffers on the LCD
amiraseman 0:d78ac68077c6 112 {
amiraseman 0:d78ac68077c6 113 if (length <= 14) { // if string will fit on display
amiraseman 0:d78ac68077c6 114 lcd.printString(bufferT,0,1); // display on screen
amiraseman 0:d78ac68077c6 115 lcd.printString(bufferP,0,2);
amiraseman 0:d78ac68077c6 116 lcd.printString(bufferTime,0,3);
amiraseman 0:d78ac68077c6 117 lcd.printString(bufferDate,0,4);
amiraseman 0:d78ac68077c6 118 }
amiraseman 0:d78ac68077c6 119 }
amiraseman 0:d78ac68077c6 120
amiraseman 0:d78ac68077c6 121
amiraseman 1:e60b9f116d38 122
amiraseman 1:e60b9f116d38 123
amiraseman 1:e60b9f116d38 124 void updateData() //
amiraseman 0:d78ac68077c6 125 {
amiraseman 0:d78ac68077c6 126 if (timerFlag) {
amiraseman 0:d78ac68077c6 127 timerFlag=0;
amiraseman 0:d78ac68077c6 128 readData();
amiraseman 0:d78ac68077c6 129 displayData();
amiraseman 0:d78ac68077c6 130 }
amiraseman 0:d78ac68077c6 131 Sleep();
amiraseman 0:d78ac68077c6 132 }
amiraseman 0:d78ac68077c6 133
amiraseman 0:d78ac68077c6 134
amiraseman 1:e60b9f116d38 135 void startMenu() //The menu displayed at the beginning
amiraseman 1:e60b9f116d38 136 {
amiraseman 1:e60b9f116d38 137
amiraseman 1:e60b9f116d38 138 switch (choice) {
amiraseman 1:e60b9f116d38 139 case 1:
amiraseman 1:e60b9f116d38 140
amiraseman 1:e60b9f116d38 141 lcd.clear();
amiraseman 1:e60b9f116d38 142 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 143 lcd.printString("Live Data",20,1);
amiraseman 1:e60b9f116d38 144 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 145 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 146 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 147 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 148 lcd.drawCircle(5,12,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 149
amiraseman 1:e60b9f116d38 150 // rest of code here
amiraseman 1:e60b9f116d38 151 break;
amiraseman 1:e60b9f116d38 152 case 2:
amiraseman 1:e60b9f116d38 153 lcd.clear();
amiraseman 1:e60b9f116d38 154 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 155 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 156 lcd.printString("Saved Data",20,2);
amiraseman 1:e60b9f116d38 157 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 158 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 159 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 160 lcd.drawCircle(5,20,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 161 // rest of code here
amiraseman 1:e60b9f116d38 162 break;
amiraseman 1:e60b9f116d38 163 case 3:
amiraseman 1:e60b9f116d38 164 lcd.clear();
amiraseman 1:e60b9f116d38 165 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 166 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 167 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 168 lcd.printString("Forecast",20,3);
amiraseman 1:e60b9f116d38 169 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 170 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 171 lcd.drawCircle(5,28,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 172 // rest of code here
amiraseman 1:e60b9f116d38 173 break;
amiraseman 1:e60b9f116d38 174 case 4:
amiraseman 1:e60b9f116d38 175 lcd.clear();
amiraseman 1:e60b9f116d38 176 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 177 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 178 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 179 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 180 lcd.printString("Alarms",20,4);
amiraseman 1:e60b9f116d38 181 lcd.printString("Settings",0,5);
amiraseman 1:e60b9f116d38 182 lcd.drawCircle(5,36,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 183 break;
amiraseman 1:e60b9f116d38 184 case 5:
amiraseman 1:e60b9f116d38 185
amiraseman 1:e60b9f116d38 186 lcd.clear();
amiraseman 1:e60b9f116d38 187 lcd.printString(bufferTime,48,0);
amiraseman 1:e60b9f116d38 188 lcd.printString("Live Data",0,1);
amiraseman 1:e60b9f116d38 189 lcd.printString("Saved Data",0,2);
amiraseman 1:e60b9f116d38 190 lcd.printString("Forecast",0,3);
amiraseman 1:e60b9f116d38 191 lcd.printString("Alarms",0,4);
amiraseman 1:e60b9f116d38 192 lcd.printString("Settings",20,5);
amiraseman 1:e60b9f116d38 193 lcd.drawCircle(5,44,3,1); // x,y,radius,black fill
amiraseman 1:e60b9f116d38 194 break;
amiraseman 1:e60b9f116d38 195 default:
amiraseman 1:e60b9f116d38 196 leds = 15;
amiraseman 1:e60b9f116d38 197 break;
amiraseman 1:e60b9f116d38 198 }
amiraseman 1:e60b9f116d38 199 }
amiraseman 1:e60b9f116d38 200
amiraseman 1:e60b9f116d38 201
amiraseman 1:e60b9f116d38 202
amiraseman 0:d78ac68077c6 203 int main()
amiraseman 0:d78ac68077c6 204 {
amiraseman 0:d78ac68077c6 205
amiraseman 0:d78ac68077c6 206 // initiliase barometer
amiraseman 0:d78ac68077c6 207 bmp180.init();
amiraseman 0:d78ac68077c6 208 lcd.init();
amiraseman 0:d78ac68077c6 209 timer.attach(&timerExpired,1.0);
amiraseman 0:d78ac68077c6 210 timer1.attach(&timer1Expired,1.0);
amiraseman 1:e60b9f116d38 211 button1.rise(&button1Pressed); // call ISR on rising edge (button1pressed)
amiraseman 1:e60b9f116d38 212 button2.rise(&button2Pressed); // call ISR on rising edge (button2pressed)
amiraseman 1:e60b9f116d38 213
amiraseman 0:d78ac68077c6 214 set_time(0); // initialise time to 1st January 1970///// This is where we should set our time
amiraseman 0:d78ac68077c6 215
amiraseman 0:d78ac68077c6 216 while(1) {
amiraseman 0:d78ac68077c6 217 setTime();
amiraseman 1:e60b9f116d38 218 //updateData();
amiraseman 1:e60b9f116d38 219 startMenu();
amiraseman 1:e60b9f116d38 220 wait (0.3);
amiraseman 0:d78ac68077c6 221 }
amiraseman 0:d78ac68077c6 222 }
amiraseman 0:d78ac68077c6 223
amiraseman 0:d78ac68077c6 224
amiraseman 0:d78ac68077c6 225