Keiarash Zoughi's Multi-Sensor for weather detection.
Dependencies: BMP180 N5110 mbed
Diff: main.cpp
- 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) { + } +}