Keiarash Zoughi's Multi-Sensor for weather detection.

Dependencies:   BMP180 N5110 mbed

main.cpp

Committer:
el13kz
Date:
2015-05-03
Revision:
1:dea8267d47d6
Parent:
0:771a5148e8e7
Child:
2:635c58eb70fb

File content as of revision 1:dea8267d47d6:

#include "mbed.h"
#include "N5110.h"
#include "BMP180.h"

#define PI 3.14159265359
//
AnalogOut aout(p18);  // DAC on pin 18
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);
DigitalIn pushbutton1(p19);
BMP180 bmp180(p28,p27);   // SDA, SCL
Serial serial(USBTX,USBRX);
Serial pc(USBTX, USBRX); // Define serial TX RX
AnalogIn ain(p20);
int selectedOption = 0;
int buttonPressed = 0;

void measurement()
{

    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();
        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;
        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);

    }
}







void graph()
{
    Measurement measurement;  // measurement structure declared in BMP180 class
    int i = 0;
    float graph[84]= {0};
    while(1) {

        // 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);




        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);

        graph[i]= temperature ;
        lcd.plotArray(graph);
        wait(0.1);  // short delay until next reading
        i++;
        if (i>83) {
            i=0;
            lcd.clear();
        }

    }

}

void settingScreen(){
    selectedOption = 0;

while(!pushbutton1){

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;

        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;

        wait(2);
        lcd.clear();
        
  }
  
  if(selectedOption == 1){
    
    measurement();}
    
    if(selectedOption == 2){
        
        graph(); 

}
}

void introScreen()
{

    lcd.printString("Welcome to",15,1);
    lcd.printString("Keiarash's",20,2);
    lcd.printString("Multi-Sensor",6,3);


}

void mainScreen()
{
    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);


        lcd.printString("measure",1,1);
        lcd.printString("settings",1,3);
        lcd.printString("graph",1,5);
        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.drawRect(70,37,10,10,0);


        lcd.printString("measure",1,1);
        lcd.printString("settings",1,3);
        lcd.printString("graph",1,5);
        lcd.printString(">",62,3);
        selectedOption = 2;

        wait(2);
        lcd.clear();

        lcd.drawRect(70,6,10,10,0);
        lcd.drawRect(70,21,10,10,0);
        lcd.drawRect(70,37,10,10,1);


        lcd.printString("measure",1,1);
        lcd.printString("settings",1,3);
        lcd.printString("graph",1,5);
        lcd.printString(">",62,5);
        selectedOption = 3;

        wait(2);
        lcd.clear();


    }
    
   if(selectedOption == 1){
    
    measurement();}
    
    if(selectedOption == 2){
        
        settingScreen();}
        
        if(selectedOption == 3){
            
          graph();    
}
}







//void check(){

// int temperature = measurement.temperature;
 
 
 // if(int temperature> 30; ){

  //   lcd.printString("temperature high!",1,1);

 //  Redled=1.0;

// wait(3); }

// if(int temperature < 3;){

  //      lcd.printString("temperature low!",1,1);

   //   Redled= 1.0;

 //   wait(3); }

// }

// void altitude(){

  //  float altitude = -(log(measurement.pressure/1013.25)*1.38*10^-23*measurement.temperature)/(9.81*28.95);

//}




int main()
{
    pushbutton1.mode(PullDown);
    // initiliase barometer
    bmp180.init();
    lcd.init();
    introScreen();
    wait(3);
    lcd.clear();
    mainScreen();
    
}