Program to display temperature and pressure readings along with date and time.
Dependencies: BMP180 N5110 PowerControl mbed
main.cpp@13:f61f8c45b361, 2015-05-11 (annotated)
- Committer:
- el13akr
- Date:
- Mon May 11 08:12:30 2015 +0000
- Revision:
- 13:f61f8c45b361
- Parent:
- 12:75df8bf76081
FINAL
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el13akr | 11:b97dd4410d72 | 1 | /** |
el13akr | 11:b97dd4410d72 | 2 | @file main.cpp |
el13akr | 11:b97dd4410d72 | 3 | @brief Main code for Weather Logger |
el13akr | 11:b97dd4410d72 | 4 | @author Alex Raper |
el13akr | 11:b97dd4410d72 | 5 | @date May 2015 |
el13akr | 11:b97dd4410d72 | 6 | */ |
el13akr | 11:b97dd4410d72 | 7 | |
el13akr | 0:c2a88630fb72 | 8 | #include "mbed.h" |
el13akr | 0:c2a88630fb72 | 9 | #include "N5110.h" |
el13akr | 0:c2a88630fb72 | 10 | #include "BMP180.h" |
el13akr | 11:b97dd4410d72 | 11 | #include "PowerControl/PowerControl.h" |
el13akr | 11:b97dd4410d72 | 12 | #include "PowerControl/EthernetPowerControl.h" |
el13akr | 0:c2a88630fb72 | 13 | |
el13akr | 11:b97dd4410d72 | 14 | #define USR_POWERDOWN (0x104) |
el13akr | 11:b97dd4410d72 | 15 | |
el13akr | 11:b97dd4410d72 | 16 | //! VCC,SCE,RST,D/C,MOSI,SCLK,LED |
el13akr | 13:f61f8c45b361 | 17 | /** Can also power (VCC) directly from VOUT (3.3 V) - |
el13akr | 13:f61f8c45b361 | 18 | Can give better performance due to current limitation from GPIO pin |
el13akr | 13:f61f8c45b361 | 19 | */ |
el13akr | 13:f61f8c45b361 | 20 | |
el13akr | 11:b97dd4410d72 | 21 | N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //!<pins for nokia screen |
el13akr | 13:f61f8c45b361 | 22 | |
el13akr | 11:b97dd4410d72 | 23 | |
el13akr | 11:b97dd4410d72 | 24 | /** |
el13akr | 11:b97dd4410d72 | 25 | @namespace timer |
el13akr | 11:b97dd4410d72 | 26 | @brief create a ticker object to read the data from the sensor |
el13akr | 11:b97dd4410d72 | 27 | */ |
el13akr | 11:b97dd4410d72 | 28 | Ticker timer; |
el13akr | 11:b97dd4410d72 | 29 | |
el13akr | 11:b97dd4410d72 | 30 | /** |
el13akr | 11:b97dd4410d72 | 31 | @namespace timeOut |
el13akr | 11:b97dd4410d72 | 32 | @brief only loops once to show menu |
el13akr | 11:b97dd4410d72 | 33 | */ |
el13akr | 11:b97dd4410d72 | 34 | Timeout timeOut; |
el13akr | 11:b97dd4410d72 | 35 | |
el13akr | 11:b97dd4410d72 | 36 | /** |
el13akr | 11:b97dd4410d72 | 37 | @namespace leds |
el13akr | 11:b97dd4410d72 | 38 | @brief leds used for error function |
el13akr | 11:b97dd4410d72 | 39 | */ |
el13akr | 11:b97dd4410d72 | 40 | BusOut leds(LED4,LED3,LED2,LED1); |
el13akr | 11:b97dd4410d72 | 41 | |
el13akr | 11:b97dd4410d72 | 42 | /** |
el13akr | 11:b97dd4410d72 | 43 | @namespace bmp180 |
el13akr | 11:b97dd4410d72 | 44 | @brief barometric pressure sensor |
el13akr | 11:b97dd4410d72 | 45 | */ |
el13akr | 11:b97dd4410d72 | 46 | BMP180 bmp180(p28,p27); |
el13akr | 0:c2a88630fb72 | 47 | |
el13akr | 11:b97dd4410d72 | 48 | /** |
el13akr | 11:b97dd4410d72 | 49 | @namespace serial |
el13akr | 11:b97dd4410d72 | 50 | @brief communication over the serial port |
el13akr | 11:b97dd4410d72 | 51 | */ |
el13akr | 0:c2a88630fb72 | 52 | Serial serial(USBTX,USBRX); |
el13akr | 11:b97dd4410d72 | 53 | |
el13akr | 11:b97dd4410d72 | 54 | /** |
el13akr | 11:b97dd4410d72 | 55 | @namespace POT |
el13akr | 11:b97dd4410d72 | 56 | @brief petentiometer used for menu |
el13akr | 11:b97dd4410d72 | 57 | */ |
el13akr | 0:c2a88630fb72 | 58 | AnalogIn POT(p20); |
el13akr | 11:b97dd4410d72 | 59 | |
el13akr | 11:b97dd4410d72 | 60 | |
el13akr | 11:b97dd4410d72 | 61 | /** |
el13akr | 11:b97dd4410d72 | 62 | @namespace graphButton |
el13akr | 11:b97dd4410d72 | 63 | @brief button to select graph |
el13akr | 11:b97dd4410d72 | 64 | */ |
el13akr | 11:b97dd4410d72 | 65 | InterruptIn graphButton(p16); |
el13akr | 11:b97dd4410d72 | 66 | |
el13akr | 11:b97dd4410d72 | 67 | /** |
el13akr | 11:b97dd4410d72 | 68 | @namespace currentButton |
el13akr | 11:b97dd4410d72 | 69 | @brief button to select current |
el13akr | 11:b97dd4410d72 | 70 | */ |
el13akr | 11:b97dd4410d72 | 71 | InterruptIn currentButton(p15); |
el13akr | 0:c2a88630fb72 | 72 | |
el13akr | 11:b97dd4410d72 | 73 | /** |
el13akr | 11:b97dd4410d72 | 74 | @namespace red |
el13akr | 11:b97dd4410d72 | 75 | @brief led for displaying error |
el13akr | 11:b97dd4410d72 | 76 | */ |
el13akr | 11:b97dd4410d72 | 77 | PwmOut red(p24); |
el13akr | 11:b97dd4410d72 | 78 | |
el13akr | 11:b97dd4410d72 | 79 | /** |
el13akr | 11:b97dd4410d72 | 80 | @namespace buzzer |
el13akr | 11:b97dd4410d72 | 81 | @brief buzzer for displaying error |
el13akr | 11:b97dd4410d72 | 82 | */ |
el13akr | 11:b97dd4410d72 | 83 | PwmOut buzzer(p21); |
el13akr | 11:b97dd4410d72 | 84 | |
el13akr | 11:b97dd4410d72 | 85 | /** |
el13akr | 11:b97dd4410d72 | 86 | @param timerFlag - flag for timer |
el13akr | 11:b97dd4410d72 | 87 | @param timeOutFlag - flag for timeOut |
el13akr | 11:b97dd4410d72 | 88 | @param graphFlag - flag for graph button |
el13akr | 11:b97dd4410d72 | 89 | @param currentFlag - flag for current button |
el13akr | 11:b97dd4410d72 | 90 | @param semihost_powerdown - used to powerdown USB interface |
el13akr | 11:b97dd4410d72 | 91 | */ |
el13akr | 13:f61f8c45b361 | 92 | |
el13akr | 13:f61f8c45b361 | 93 | |
el13akr | 0:c2a88630fb72 | 94 | int timerFlag= 0; |
el13akr | 13:f61f8c45b361 | 95 | int timeOutFlag = 0; |
el13akr | 13:f61f8c45b361 | 96 | int graphFlag = 0; |
el13akr | 2:63ef0a1afcbe | 97 | int currentFlag = 0; |
el13akr | 11:b97dd4410d72 | 98 | int semihost_powerdown(); |
el13akr | 13:f61f8c45b361 | 99 | int main(); //!<main code |
el13akr | 13:f61f8c45b361 | 100 | char rxString[16]; //!<buffer to store received string |
el13akr | 11:b97dd4410d72 | 101 | char bufferTime[14];//!<array to store time |
el13akr | 11:b97dd4410d72 | 102 | char bufferDate[14];//!<array to store date |
el13akr | 11:b97dd4410d72 | 103 | float temperature; //!<stores temperature value as a float (has to be a float or graph doesn't work) |
el13akr | 11:b97dd4410d72 | 104 | float pressure;//!<stores pressure value as a float |
el13akr | 11:b97dd4410d72 | 105 | void displayTemperature();//!<function to display current temperature value |
el13akr | 11:b97dd4410d72 | 106 | void displayPressure();//!<function to display current pressure value |
el13akr | 11:b97dd4410d72 | 107 | void receiveData();//!<function to get the data from the BMP180 |
el13akr | 11:b97dd4410d72 | 108 | void displayTemperatureGraph();//!<function to display the graph of temperature |
el13akr | 11:b97dd4410d72 | 109 | void displayPressureGraph();//!<function to display the graph of pressure |
el13akr | 11:b97dd4410d72 | 110 | void error();//!<function to display visual error when values go above threshold |
el13akr | 11:b97dd4410d72 | 111 | void time();//!<function to display time and date |
el13akr | 11:b97dd4410d72 | 112 | void setTime(); //!<function to set the UNIX time |
el13akr | 11:b97dd4410d72 | 113 | void interrupt(); //!<for RTC |
el13akr | 13:f61f8c45b361 | 114 | void menu(); //!<function to display main menu screen |
el13akr | 0:c2a88630fb72 | 115 | |
el13akr | 11:b97dd4410d72 | 116 | int semihost_powerdown()//!<function to power-down USB interface |
el13akr | 11:b97dd4410d72 | 117 | { |
el13akr | 11:b97dd4410d72 | 118 | uint32_t arg; |
el13akr | 11:b97dd4410d72 | 119 | return __semihost(USR_POWERDOWN, &arg); |
el13akr | 11:b97dd4410d72 | 120 | } |
el13akr | 11:b97dd4410d72 | 121 | |
el13akr | 11:b97dd4410d72 | 122 | void screen() //!<welcome screen |
el13akr | 0:c2a88630fb72 | 123 | { |
el13akr | 0:c2a88630fb72 | 124 | lcd.printString("Weather Logger",0,2); |
el13akr | 0:c2a88630fb72 | 125 | lcd.printString("3000",32,3); |
el13akr | 0:c2a88630fb72 | 126 | lcd.printString("Alex Raper",15,5); |
el13akr | 3:075786ca7621 | 127 | lcd.refresh(); //clear screen |
el13akr | 0:c2a88630fb72 | 128 | } |
el13akr | 0:c2a88630fb72 | 129 | |
el13akr | 11:b97dd4410d72 | 130 | void menu() //!<main menu screen |
el13akr | 0:c2a88630fb72 | 131 | { |
el13akr | 12:75df8bf76081 | 132 | |
el13akr | 1:026d80a2f7a9 | 133 | lcd.clear(); |
el13akr | 11:b97dd4410d72 | 134 | if (POT>=(3.0/4.0)) { //!<if the potentiometer is pointing to the left (temperature) |
el13akr | 11:b97dd4410d72 | 135 | lcd.printString("Temperature",2,2); //!<data type label |
el13akr | 11:b97dd4410d72 | 136 | lcd.printString(">",76,2); //!<arrow denoting a different screen can be shown by pointing potentiometer in right direction |
el13akr | 11:b97dd4410d72 | 137 | lcd.printString("Graph",0,5);//!<graph button label |
el13akr | 11:b97dd4410d72 | 138 | lcd.printString("Current",42,5);//!<current button label |
el13akr | 11:b97dd4410d72 | 139 | if (graphFlag) { //!<if the graph button is pressed |
el13akr | 11:b97dd4410d72 | 140 | graphFlag = 0; //!<reset graph flag to 0 |
el13akr | 11:b97dd4410d72 | 141 | displayTemperatureGraph(); //!<display temperature graph from function |
el13akr | 6:49a3fb0956ef | 142 | |
el13akr | 0:c2a88630fb72 | 143 | |
el13akr | 2:63ef0a1afcbe | 144 | } |
el13akr | 11:b97dd4410d72 | 145 | if (currentFlag ==1 ) { //!<if the current button is pressed |
el13akr | 11:b97dd4410d72 | 146 | currentFlag = 0; //!<reset current flag to 0 |
el13akr | 6:49a3fb0956ef | 147 | |
el13akr | 11:b97dd4410d72 | 148 | displayTemperature(); //!<display current temperature value |
el13akr | 2:63ef0a1afcbe | 149 | } |
el13akr | 8:9461cda3310b | 150 | } else if ((3.0/4.0)>POT && POT>=(1.0/2.0)) { |
el13akr | 11:b97dd4410d72 | 151 | lcd.printString("Pressure",18,2);//!<data type label |
el13akr | 11:b97dd4410d72 | 152 | lcd.printString("<",2,2);//!<arrow denoting a different screen can be shown by pointing potentiometer in left direction |
el13akr | 11:b97dd4410d72 | 153 | lcd.printString(">",76,2); //!<arrow denoting a different screen can be shown by pointing potentiometer in right direction |
el13akr | 11:b97dd4410d72 | 154 | lcd.printString("Graph",0,5);//!<graph button label |
el13akr | 11:b97dd4410d72 | 155 | lcd.printString("Current",42,5);//!<current button label |
el13akr | 11:b97dd4410d72 | 156 | if (graphFlag) { //!<if the graph button is pressed |
el13akr | 11:b97dd4410d72 | 157 | graphFlag = 0; //!<reset graph flag to 0 |
el13akr | 11:b97dd4410d72 | 158 | displayPressureGraph();//!<display pressure graph from function |
el13akr | 8:9461cda3310b | 159 | |
el13akr | 0:c2a88630fb72 | 160 | |
el13akr | 2:63ef0a1afcbe | 161 | } |
el13akr | 8:9461cda3310b | 162 | |
el13akr | 11:b97dd4410d72 | 163 | if (currentFlag) { //!<if the current button is pressed |
el13akr | 11:b97dd4410d72 | 164 | currentFlag = 0; //!<reset current flag to 0 |
el13akr | 11:b97dd4410d72 | 165 | displayPressure();//!<display current pressure value |
el13akr | 2:63ef0a1afcbe | 166 | } |
el13akr | 8:9461cda3310b | 167 | } else if ((1.0/2.0)>POT && POT>=(1.0/4.0)) { |
el13akr | 8:9461cda3310b | 168 | time(); |
el13akr | 11:b97dd4410d72 | 169 | lcd.printString("Date",30,0);//!<date label |
el13akr | 11:b97dd4410d72 | 170 | lcd.printString(">",76,2); //!<arrow denoting a different screen can be shown by pointing potentiometer in right direction |
el13akr | 11:b97dd4410d72 | 171 | lcd.printString("<",2,2);//!<arrow denoting a different screen can be shown by pointing potentiometer in left direction |
el13akr | 11:b97dd4410d72 | 172 | lcd.printString(bufferDate,19,2);//!<display date |
el13akr | 8:9461cda3310b | 173 | } else { |
el13akr | 8:9461cda3310b | 174 | time(); |
el13akr | 11:b97dd4410d72 | 175 | lcd.printString("Time",30,0);//!<time stamp |
el13akr | 11:b97dd4410d72 | 176 | lcd.printString("<",2,2);//!<arrow denoting a different screen can be shown by pointing potentiometer in left direction |
el13akr | 11:b97dd4410d72 | 177 | lcd.printString(bufferTime,19,2);//!<display time |
el13akr | 0:c2a88630fb72 | 178 | } |
el13akr | 0:c2a88630fb72 | 179 | } |
el13akr | 0:c2a88630fb72 | 180 | |
el13akr | 6:49a3fb0956ef | 181 | |
el13akr | 8:9461cda3310b | 182 | |
el13akr | 8:9461cda3310b | 183 | |
el13akr | 11:b97dd4410d72 | 184 | void time(){ //!<function to get time |
el13akr | 8:9461cda3310b | 185 | |
el13akr | 11:b97dd4410d72 | 186 | time_t seconds = time(NULL); //!<get current time |
el13akr | 11:b97dd4410d72 | 187 | strftime(bufferTime, 14 , "%X", localtime(&seconds));//!<format time into a string |
el13akr | 11:b97dd4410d72 | 188 | strftime(bufferDate, 14 , "%D", localtime(&seconds));//!<format date into a string |
el13akr | 8:9461cda3310b | 189 | } |
el13akr | 8:9461cda3310b | 190 | |
el13akr | 13:f61f8c45b361 | 191 | void timerExpired() //!<Interrupt service routine |
el13akr | 2:63ef0a1afcbe | 192 | { |
el13akr | 13:f61f8c45b361 | 193 | timerFlag = 1 ; //!<set timer flag |
el13akr | 0:c2a88630fb72 | 194 | } |
el13akr | 0:c2a88630fb72 | 195 | |
el13akr | 13:f61f8c45b361 | 196 | void timeOutStopped() //!<Interrupt service routine |
el13akr | 2:63ef0a1afcbe | 197 | { |
el13akr | 2:63ef0a1afcbe | 198 | |
el13akr | 13:f61f8c45b361 | 199 | timeOutFlag = 1; //!<set time out flag |
el13akr | 2:63ef0a1afcbe | 200 | } |
el13akr | 0:c2a88630fb72 | 201 | |
el13akr | 13:f61f8c45b361 | 202 | void graphButtonPressed () //!<Interrupt service routine |
el13akr | 2:63ef0a1afcbe | 203 | { |
el13akr | 13:f61f8c45b361 | 204 | graphFlag = 1; //!<set graph flag |
el13akr | 11:b97dd4410d72 | 205 | //serial.printf("graph button pressed "); //!<used for debugging |
el13akr | 2:63ef0a1afcbe | 206 | } |
el13akr | 2:63ef0a1afcbe | 207 | |
el13akr | 13:f61f8c45b361 | 208 | void currentButtonPressed () //!<Interrupt service routine |
el13akr | 2:63ef0a1afcbe | 209 | { |
el13akr | 13:f61f8c45b361 | 210 | currentFlag = 1; //!<set current flag |
el13akr | 11:b97dd4410d72 | 211 | //serial.printf("current button pressed "); //!<used for debugging |
el13akr | 2:63ef0a1afcbe | 212 | } |
el13akr | 11:b97dd4410d72 | 213 | void receiveData() //!<function to receive data from BMP |
el13akr | 0:c2a88630fb72 | 214 | { |
el13akr | 0:c2a88630fb72 | 215 | |
el13akr | 11:b97dd4410d72 | 216 | Measurement measurement; //!<measurement structure declared in BMP180 class |
el13akr | 0:c2a88630fb72 | 217 | |
el13akr | 11:b97dd4410d72 | 218 | //! read values (T in Celsius and P in mb) and print over serial port |
el13akr | 0:c2a88630fb72 | 219 | measurement = bmp180.readValues(); |
el13akr | 11:b97dd4410d72 | 220 | //serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure); //!<used for debugging |
el13akr | 0:c2a88630fb72 | 221 | |
el13akr | 11:b97dd4410d72 | 222 | temperature = measurement.temperature ; //!<formatted temperature |
el13akr | 11:b97dd4410d72 | 223 | pressure = measurement.pressure ; //!<formatted pressure |
el13akr | 0:c2a88630fb72 | 224 | |
el13akr | 7:32a4756cba1d | 225 | error(); |
el13akr | 7:32a4756cba1d | 226 | |
el13akr | 0:c2a88630fb72 | 227 | } |
el13akr | 0:c2a88630fb72 | 228 | |
el13akr | 0:c2a88630fb72 | 229 | |
el13akr | 11:b97dd4410d72 | 230 | void displayTemperature() //!<function to display formatted temperature |
el13akr | 0:c2a88630fb72 | 231 | { |
el13akr | 6:49a3fb0956ef | 232 | while(1) { |
el13akr | 11:b97dd4410d72 | 233 | if (timerFlag ==1) { //!<if the timer flag is set (Timer every 1.0 second) |
el13akr | 11:b97dd4410d72 | 234 | timerFlag = 0; //!<reset flag to 0 |
el13akr | 11:b97dd4410d72 | 235 | lcd.clear(); //!<clear screen |
el13akr | 11:b97dd4410d72 | 236 | receiveData(); //!<get data from function |
el13akr | 11:b97dd4410d72 | 237 | char buffer[14]; //!<each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
el13akr | 11:b97dd4410d72 | 238 | //! so can display a string of a maximum 14 characters in length |
el13akr | 11:b97dd4410d72 | 239 | //!or create formatted strings - ensure they aren't more than 14 characters long |
el13akr | 11:b97dd4410d72 | 240 | int length = sprintf(buffer,"T = %.2f C",temperature); //!<print formatted data to buffer |
el13akr | 6:49a3fb0956ef | 241 | // it is important the format specifier ensures the length will fit in the buffer |
el13akr | 11:b97dd4410d72 | 242 | //serial.printf( " L %i",length); //!<used for debugging |
el13akr | 11:b97dd4410d72 | 243 | if (length <= 14) //!<if string will fit on display |
el13akr | 11:b97dd4410d72 | 244 | lcd.printString(buffer,0,2); //!<display on screen |
el13akr | 7:32a4756cba1d | 245 | |
el13akr | 11:b97dd4410d72 | 246 | lcd.printString("Menu",60,5);//!<menu button label |
el13akr | 11:b97dd4410d72 | 247 | wait(0.1); //!<time inbetween each plot |
el13akr | 6:49a3fb0956ef | 248 | if (currentFlag == 1 ) { |
el13akr | 6:49a3fb0956ef | 249 | currentFlag = 0; |
el13akr | 6:49a3fb0956ef | 250 | break ; |
el13akr | 6:49a3fb0956ef | 251 | } |
el13akr | 6:49a3fb0956ef | 252 | } |
el13akr | 6:49a3fb0956ef | 253 | } |
el13akr | 0:c2a88630fb72 | 254 | } |
el13akr | 0:c2a88630fb72 | 255 | |
el13akr | 11:b97dd4410d72 | 256 | void displayPressure() //!<function to display formatted pressure |
el13akr | 2:63ef0a1afcbe | 257 | { |
el13akr | 6:49a3fb0956ef | 258 | while(1) { |
el13akr | 11:b97dd4410d72 | 259 | if (timerFlag ==1) { //!<if the timer flag is set (Timer every 1.0 second) |
el13akr | 11:b97dd4410d72 | 260 | timerFlag = 0; //!<reset flag to 0 |
el13akr | 11:b97dd4410d72 | 261 | lcd.clear(); //!<clear screen |
el13akr | 11:b97dd4410d72 | 262 | receiveData(); //!<get data from function |
el13akr | 11:b97dd4410d72 | 263 | char buffer1[14]; //!<same as temperature |
el13akr | 11:b97dd4410d72 | 264 | int length1 = sprintf(buffer1,"P = %.2fmb",pressure); //!<print formatted data to buffer1 |
el13akr | 11:b97dd4410d72 | 265 | //serial.printf( " L1 %i",length1); //!<used for debugging |
el13akr | 11:b97dd4410d72 | 266 | if (length1 <= 14) //!<if string will fit on display |
el13akr | 11:b97dd4410d72 | 267 | lcd.printString(buffer1,0,2); //!<display on screen |
el13akr | 7:32a4756cba1d | 268 | |
el13akr | 11:b97dd4410d72 | 269 | lcd.printString("Menu",60,5);//!<menu button label |
el13akr | 11:b97dd4410d72 | 270 | wait(0.1); //!<time inbetween each plot |
el13akr | 7:32a4756cba1d | 271 | |
el13akr | 6:49a3fb0956ef | 272 | if (currentFlag == 1 ) { |
el13akr | 6:49a3fb0956ef | 273 | currentFlag = 0; |
el13akr | 6:49a3fb0956ef | 274 | break ; |
el13akr | 6:49a3fb0956ef | 275 | } |
el13akr | 6:49a3fb0956ef | 276 | } |
el13akr | 6:49a3fb0956ef | 277 | } |
el13akr | 2:63ef0a1afcbe | 278 | } |
el13akr | 0:c2a88630fb72 | 279 | |
el13akr | 11:b97dd4410d72 | 280 | void displayTemperatureGraph() //!<function to display temperature graph |
el13akr | 4:f4154181d941 | 281 | { |
el13akr | 4:f4154181d941 | 282 | |
el13akr | 11:b97dd4410d72 | 283 | float temperatureArray[84]; //!<maximum capacity of array is 84 |
el13akr | 11:b97dd4410d72 | 284 | int j=0; //!<initialise j to 0 |
el13akr | 4:f4154181d941 | 285 | while(1) { |
el13akr | 11:b97dd4410d72 | 286 | lcd.clear(); //!<clear screen |
el13akr | 11:b97dd4410d72 | 287 | lcd.printString("Menu",0,5);//!<menu button label |
el13akr | 7:32a4756cba1d | 288 | |
el13akr | 11:b97dd4410d72 | 289 | receiveData(); //!<get data from function |
el13akr | 11:b97dd4410d72 | 290 | temperatureArray[j] = (temperature/47); //!<stores current temperature value in array |
el13akr | 11:b97dd4410d72 | 291 | j++; //!<adds 1 to value of j to store next temperature value |
el13akr | 11:b97dd4410d72 | 292 | lcd.plotArray(temperatureArray); //!<plots the array as a line |
el13akr | 11:b97dd4410d72 | 293 | if (j>83) { //!<if the array is full |
el13akr | 11:b97dd4410d72 | 294 | memset (temperatureArray,0, sizeof(temperatureArray)); //!<reset to 0 so line graph starts again |
el13akr | 4:f4154181d941 | 295 | j = 0; |
el13akr | 4:f4154181d941 | 296 | } |
el13akr | 11:b97dd4410d72 | 297 | wait(0.1); //!<time inbetween each plot |
el13akr | 7:32a4756cba1d | 298 | |
el13akr | 6:49a3fb0956ef | 299 | if (graphFlag == 1 ) { |
el13akr | 6:49a3fb0956ef | 300 | graphFlag = 0; |
el13akr | 6:49a3fb0956ef | 301 | break ; |
el13akr | 6:49a3fb0956ef | 302 | } |
el13akr | 4:f4154181d941 | 303 | } |
el13akr | 3:075786ca7621 | 304 | } |
el13akr | 3:075786ca7621 | 305 | |
el13akr | 11:b97dd4410d72 | 306 | void displayPressureGraph() //!<function to display pressure graph |
el13akr | 4:f4154181d941 | 307 | { |
el13akr | 4:f4154181d941 | 308 | |
el13akr | 11:b97dd4410d72 | 309 | float pressureArray[84]; //!<maximum capacity of array is 84 |
el13akr | 11:b97dd4410d72 | 310 | int j=0; //!<initialise j to 0 |
el13akr | 4:f4154181d941 | 311 | while(1) { |
el13akr | 11:b97dd4410d72 | 312 | lcd.clear(); //!<clear screen |
el13akr | 11:b97dd4410d72 | 313 | lcd.printString("Menu",0,5);//!<menu button label |
el13akr | 7:32a4756cba1d | 314 | |
el13akr | 11:b97dd4410d72 | 315 | receiveData(); //!<get data from function |
el13akr | 11:b97dd4410d72 | 316 | pressureArray[j] = (pressure/1100); //!<stores current pressure value in array |
el13akr | 11:b97dd4410d72 | 317 | j++; //!<adds 1 to value of j to store next pressure value |
el13akr | 11:b97dd4410d72 | 318 | lcd.plotArray(pressureArray); //!<plots the array as a line |
el13akr | 11:b97dd4410d72 | 319 | if (j>83) { //!<if the array is full |
el13akr | 11:b97dd4410d72 | 320 | memset (pressureArray,0, sizeof(pressureArray));//!<reset to 0 so line graph starts again |
el13akr | 4:f4154181d941 | 321 | j = 0; |
el13akr | 4:f4154181d941 | 322 | } |
el13akr | 11:b97dd4410d72 | 323 | wait(0.1); //!<time inbetween each plot |
el13akr | 7:32a4756cba1d | 324 | |
el13akr | 6:49a3fb0956ef | 325 | if (graphFlag == 1 ) { |
el13akr | 6:49a3fb0956ef | 326 | graphFlag = 0; |
el13akr | 6:49a3fb0956ef | 327 | break ; |
el13akr | 6:49a3fb0956ef | 328 | } |
el13akr | 4:f4154181d941 | 329 | } |
el13akr | 3:075786ca7621 | 330 | } |
el13akr | 0:c2a88630fb72 | 331 | |
el13akr | 11:b97dd4410d72 | 332 | void error() //!<error function |
el13akr | 7:32a4756cba1d | 333 | { |
el13akr | 7:32a4756cba1d | 334 | |
el13akr | 11:b97dd4410d72 | 335 | if (temperature > 29 || pressure > 1000) { //!<if temperature or pressure goes above threshold values |
el13akr | 11:b97dd4410d72 | 336 | red = 1; //!<red LED turns on |
el13akr | 11:b97dd4410d72 | 337 | |
el13akr | 11:b97dd4410d72 | 338 | //!can't use buzzer because PWM signal is affecting LCD screen |
el13akr | 7:32a4756cba1d | 339 | //buzzer.period(1/590); |
el13akr | 10:0783c29dc776 | 340 | //buzzer=0.5; // set duty cycle |
el13akr | 11:b97dd4410d72 | 341 | |
el13akr | 7:32a4756cba1d | 342 | |
el13akr | 7:32a4756cba1d | 343 | } else { |
el13akr | 11:b97dd4410d72 | 344 | red=0; //!<red LED stays off |
el13akr | 7:32a4756cba1d | 345 | } |
el13akr | 7:32a4756cba1d | 346 | } |
el13akr | 0:c2a88630fb72 | 347 | |
el13akr | 11:b97dd4410d72 | 348 | int main() //!<main code |
el13akr | 0:c2a88630fb72 | 349 | { |
el13akr | 11:b97dd4410d72 | 350 | PHY_PowerDown(); //!<ethernet power-down |
el13akr | 11:b97dd4410d72 | 351 | int result = semihost_powerdown(); //!<interface power-down |
el13akr | 11:b97dd4410d72 | 352 | lcd.init();//!<initialise display |
el13akr | 11:b97dd4410d72 | 353 | bmp180.init();//!<initiliase barometer |
el13akr | 11:b97dd4410d72 | 354 | timer.attach (&timerExpired , 1.0); //!<instead of using wait(1.0) |
el13akr | 13:f61f8c45b361 | 355 | timeOut.attach (&timeOutStopped , 2.0); //!<instead of using wait(2.0) |
el13akr | 2:63ef0a1afcbe | 356 | graphButton.rise (&graphButtonPressed); |
el13akr | 2:63ef0a1afcbe | 357 | currentButton.rise (¤tButtonPressed); |
el13akr | 7:32a4756cba1d | 358 | red.period_us(25); |
el13akr | 11:b97dd4410d72 | 359 | //set_time(1430415950); //!<initialise time to now |
el13akr | 11:b97dd4410d72 | 360 | screen(); //!<show the welcome screen |
el13akr | 1:026d80a2f7a9 | 361 | |
el13akr | 0:c2a88630fb72 | 362 | while(1) { |
el13akr | 11:b97dd4410d72 | 363 | time();//!<get time and date |
el13akr | 2:63ef0a1afcbe | 364 | if (timeOutFlag ==1 ) { |
el13akr | 11:b97dd4410d72 | 365 | menu(); //!<display menu screen(s) |
el13akr | 2:63ef0a1afcbe | 366 | } |
el13akr | 11:b97dd4410d72 | 367 | wait (0.1); //!<necessary wait so screen is clear and easy to read |
el13akr | 0:c2a88630fb72 | 368 | } |
el13akr | 0:c2a88630fb72 | 369 | } |