Project D - Weather Station

Dependencies:   BMP180 N5110 beep mbed

Revision:
0:e0e85d08133d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun May 10 00:12:30 2015 +0000
@@ -0,0 +1,124 @@
+#include "mbed.h"
+#include "N5110.h"
+#include "beep.h"
+#include "BMP180.h"
+
+N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
+Beep buzzer(p21);
+BusOut leds(LED4,LED3,LED2,LED1);
+BMP180 bmp180(p28,p27);
+InterruptIn  button(p15);
+DigitalOut led(p24);
+
+#define up 1
+#define down 0
+
+int state = up;
+
+int buttonFlag = 0;
+
+void buttonPressed()
+{
+    state = ! state;     
+}
+
+
+
+
+int main()
+{   
+    lcd.init();
+    bmp180.init();
+    
+    //startup picture
+    //the project name is Weather Station, print it on screen
+    lcd.printString("Weather",1,1);
+    lcd.printString("Station",1,2);
+    
+    wait(2.0); //keep the startup picture for 2 seconds
+    lcd.clear(); //clear the screen
+    buzzer.beep(2000,1.0); //the buzzer beeps at 2000Hz for 1 second
+    Measurement measurement; //start to measure temperature and atmosphere pressure
+    button.rise(&buttonPressed); //check the button rised
+    
+    
+    while(1)
+    {
+            measurement = bmp180.readValues(); 
+            char celsius[14];//create a bufffer named celsius
+            int length = sprintf(celsius,"T = %.2f C",measurement.temperature); //The value measured by the sensor is put into the variable "celsius". And it is displayed on screen.
+             
+            char pressure[14];//create a bufffer named pressure
+            
+            //The value measured by the sensor is put into the variable "pressure". And it is displayed on screen.
+            length = sprintf(pressure,"P = %.2f hPa",measurement.pressure);
+
+            float f = (measurement.temperature + 32)*1.8; //the formula to change unit between Celsius and Fahrenheit.    
+            char fahrenheit[14];
+                
+            //display values on screen
+            length = sprintf(fahrenheit,"T = %.2f F",f);
+
+            //All words will stay on screen for 1 second in case that the numbers changes too fast to read. 
+            wait(1.0);
+            lcd.clear();
+ 
+ 
+ 
+            switch(state)
+            {
+                case up:
+                    state = 1;
+                    lcd.printString("Celsius",0,0); //Celsius is shown in the first line on the screen. The default unit of temperature is Celsius. 
+                      
+                    //Atmosphere Pressure is shown in the 3rd and 4th line on screen.
+                    lcd.printString("Atmosphere",0,3);
+                    lcd.printString("Pressure",0,4);
+                    
+                    //display the values of temperature and air pressure
+                    lcd.printString(celsius,0,1);
+                    lcd.printString(pressure,0,5);    
+                    break;
+                    
+                case down:     
+                    state = 0;
+                    lcd.printString("Fahrenheit",0,0); //Fahrenheit is shown in the first line on the screen. The default unit of temperature is Fahrenheit.
+                    
+                     //Atmosphere Pressure is shown in the 3rd and 4th line on screen.
+                    lcd.printString("Atmosphere",0,3);
+                    lcd.printString("Pressure",0,4);
+                    
+                    //display the values of temperature and air pressure
+                    lcd.printString(fahrenheit,0,1);
+                    lcd.printString(pressure,0,5);                    
+                default:
+                    break;   
+            }
+            
+            
+             
+            //set a range of suitable temperature
+            //if temperature is greater than 28 degrees,the buzzer will beep at 3000Hz for 0.5 seconds and the LED will work.
+            if (measurement.temperature >= 28.00)
+            {
+            buzzer.beep(3000,0.5); //the buzzer beeps at 3000Hz for 0.5 seconds
+            led = 1; //the LED works
+            }
+            
+            //if temperature is less than 25 degrees, the buzzer will beep at 2000Hz for 1 second and LED will not work.
+            else if (measurement.temperature <= 25.00)
+            {   
+            buzzer.beep(2000,1.0); //the buzzer beeps at 2000Hz for 1 second
+            led = 0; //LED does not work
+            }
+            
+            //if temperature is between 25 to 28 degrees, neither of the buzzer and the LED works.
+            else 
+            {   
+            buzzer.nobeep(); //buzzer no beeping 
+            led =0; //LED off
+            }                  
+    }
+                         
+}
+    
\ No newline at end of file