Keiarash Zoughi's Multi-Sensor for weather detection.

Dependencies:   BMP180 N5110 mbed

Revision:
2:635c58eb70fb
Parent:
1:dea8267d47d6
Child:
3:2b49a80bd90b
Child:
4:47b0473fa81b
--- a/main.cpp	Sun May 03 06:48:21 2015 +0000
+++ b/main.cpp	Wed May 06 14:02:16 2015 +0000
@@ -3,24 +3,37 @@
 #include "BMP180.h"
 
 #define PI 3.14159265359
-//
-AnalogOut aout(p18);  // DAC on pin 18
+
+//LCD inputs
+N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
+
+//serial port for debugging
+Serial serial(USBTX,USBRX);
+
+//LED outputs
 BusOut leds(LED4,LED3,LED2,LED1);  // LEDs for display
 
-N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
-int cells[84][48];
-PwmOut Redled(p24);
+
+//select button
 DigitalIn pushbutton1(p19);
+
+
+//barometer sensor input
 BMP180 bmp180(p28,p27);   // SDA, SCL
-Serial serial(USBTX,USBRX);
-Serial pc(USBTX, USBRX); // Define serial TX RX
-AnalogIn ain(p20);
+
+//warning LED
+PwmOut Redled(p24);
+
+//globals
 int selectedOption = 0;
 int buttonPressed = 0;
 
+//boundary conditions - screen
+int cells[84][48];
+
+//shows pressure reading and temperature
 void measurement()
 {
-
     Measurement measurement;  // measurement structure declared in BMP180 class
     while(1) {
 
@@ -41,16 +54,13 @@
         length = sprintf(buffer,"P = %.2f mb",pressure);
         if (length <= 14)
             lcd.printString(buffer,0,2);
-
     }
 }
 
 
-
-
+//pushbutton - 0
 
-
-
+//plots graph of temperature point by point
 void graph()
 {
     Measurement measurement;  // measurement structure declared in BMP180 class
@@ -62,10 +72,6 @@
         measurement = bmp180.readValues();
         //serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
 
-
-
-
-        char buffer[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
         // so can display a string of a maximum 14 characters in length
         // or create formatted strings - ensure they aren't more than 14 characters long
         int temperature = measurement.temperature;
@@ -87,46 +93,46 @@
             i=0;
             lcd.clear();
         }
-
     }
-
 }
 
-void settingScreen(){
+void settingScreen()
+{
     selectedOption = 0;
 
-while(!pushbutton1){
+    while(pushbutton1) {
 
-lcd.drawRect(70,6,10,10,1);
-lcd.drawRect(70,21,10,10,0);
+        lcd.drawRect(70,6,10,10,1);
+        lcd.drawRect(70,21,10,10,0);
 
-lcd.printString("clock",1,1);
-lcd.printString(">",62,1);
-selectedOption = 1;
+        lcd.printString("clock",1,1);
+        lcd.printString(">",62,1);
+        selectedOption = 1;
 
         wait(2);
         lcd.clear();
 
-lcd.drawRect(70,6,10,10,0);
-lcd.drawRect(70,21,10,10,1);
-lcd.printString("go back",1,3);
-lcd.printString(">",62,3);
-selectedOption = 2;
+        lcd.drawRect(70,6,10,10,0);
+        lcd.drawRect(70,21,10,10,1);
+        lcd.printString("go back",1,3);
+        lcd.printString(">",62,3);
+        selectedOption = 2;
 
         wait(2);
         lcd.clear();
-        
-  }
-  
-  if(selectedOption == 1){
-    
-    measurement();}
-    
-    if(selectedOption == 2){
-        
-        graph(); 
+
+    }
+
+    if(selectedOption == 1) {
 
-}
+        measurement();
+    }
+
+    if(selectedOption == 2) {
+
+        graph();
+
+    }
 }
 
 void introScreen()
@@ -135,6 +141,7 @@
     lcd.printString("Welcome to",15,1);
     lcd.printString("Keiarash's",20,2);
     lcd.printString("Multi-Sensor",6,3);
+   Redled= 1.0;
 
 
 }
@@ -143,17 +150,18 @@
 {
     selectedOption = 0;
 
-    while(!pushbutton1) {
-
-        lcd.drawRect(70,6,10,10,1);
-        lcd.drawRect(70,21,10,10,0);
-        lcd.drawRect(70,37,10,10,0);
+    while(pushbutton1) {//initialse pushbutton as 0
+        
+        //check boxes-options to be selected
+        lcd.drawRect(70,6,10,10,1);//check box 1
+        lcd.drawRect(70,21,10,10,0);//check box 2
+        lcd.drawRect(70,37,10,10,0);//check box 3
 
-
-        lcd.printString("measure",1,1);
-        lcd.printString("settings",1,3);
-        lcd.printString("graph",1,5);
-        lcd.printString(">",62,1);
+        //option titles-appropriate to check boxes
+        lcd.printString("measure",1,1);//select measure menu
+        lcd.printString("settings",1,3);//select settings menu
+        lcd.printString("graph",1,5);//select grpah plot
+        lcd.printString(">",62,1);//pointer
         selectedOption = 1;
 
         wait(2);
@@ -189,19 +197,21 @@
 
 
     }
-    
-   if(selectedOption == 1){
-    
-    measurement();}
-    
-    if(selectedOption == 2){
-        
-        settingScreen();}
-        
-        if(selectedOption == 3){
-            
-          graph();    
-}
+
+    if(selectedOption == 1) {
+
+        measurement();
+    }
+
+    if(selectedOption == 2) {
+
+        settingScreen();
+    }
+
+    if(selectedOption == 3) {
+
+        graph();
+    }
 }
 
 
@@ -210,47 +220,87 @@
 
 
 
-//void check(){
+void check(){
+    
+    Redled.period(0.02); // set PWM period to 20ms
 
-// int temperature = measurement.temperature;
- 
- 
- // if(int temperature> 30; ){
+Measurement measurement;  // measurement structure declared in BMP180 class
+    
 
-  //   lcd.printString("temperature high!",1,1);
-
- //  Redled=1.0;
-
-// wait(3); }
+        // read values (T in Celsius and P in mb) and print over serial port
+        measurement = bmp180.readValues();
+        serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
 
-// if(int temperature < 3;){
-
-  //      lcd.printString("temperature low!",1,1);
+        char buffer[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
+        // so can display a string of a maximum 14 characters in length
+        // or create formatted strings - ensure they aren't more than 14 characters long
+        int temperature = measurement.temperature;
+        int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
+        // it is important the format specifier ensures the length will fit in the buffer
+        if (length <= 14)  // if string will fit on display
+            lcd.printString(buffer,0,1);           // display on screen
+//
+        float pressure = measurement.pressure;  // same idea with floats
+        length = sprintf(buffer,"P = %.2f mb",pressure);
+        if (length <= 14)
+            lcd.printString(buffer,0,2);
+    
 
-   //   Redled= 1.0;
+ if(measurement.temperature > 30 ){
 
- //   wait(3); }
+   lcd.printString("temperature high!",1,1);
 
-// }
+  Redled=1.0;
+
+ wait(3); }
 
-// void altitude(){
+ if(measurement.temperature < 3){
+
+      lcd.printString("temperature low!",1,1);
+
+   Redled= 1.0;
 
-  //  float altitude = -(log(measurement.pressure/1013.25)*1.38*10^-23*measurement.temperature)/(9.81*28.95);
+   wait(3); }
 
-//}
+else { lcd.printString("temperature ok!",1,1);
+wait(3);
+ }
+}
+
+
+ void altitude(){ // creating a new reading from the current ones, this appoximates the altitude in metres.
 
 
 
+    Measurement measurement;  // measurement structure declared in BMP180 class
+    
+while(1){
+        // read values (T in Celsius and P in mb) and print over serial port
+        measurement = bmp180.readValues();
+        
+        int temperature = measurement.temperature;
+        int pressure = measurement.pressure;  // same idea with floats
 
+float altitude = -(log(pressure/1013.25)*1.38e-23*temperature)/(9.81*28.95);
+serial.printf("A = %.2f metres",altitude);
+}
+
+}
+
+//main loop
 int main()
 {
-    pushbutton1.mode(PullDown);
+    pushbutton1.mode(PullUp);//initial value 0
     // initiliase barometer
     bmp180.init();
+    
     lcd.init();
     introScreen();
     wait(3);
+    Redled =0;
     lcd.clear();
     mainScreen();
     
-}
\ No newline at end of file
+    while(1) {
+        }
+}