Keiarash Zoughi's Multi-Sensor for weather detection.
Dependencies: BMP180 N5110 mbed
main.cpp
- Committer:
- el13kz
- Date:
- 2015-05-08
- Revision:
- 7:c39d54bdff28
- Parent:
- 6:07133c44d3eb
- Child:
- 8:956a130ebdf5
File content as of revision 7:c39d54bdff28:
#include "mbed.h" #include "N5110.h" #include "BMP180.h" #define PI 3.14159265359 //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 //select button DigitalIn pushbutton1(p19); //barometer sensor input BMP180 bmp180(p28,p27); // SDA, SCL //warning LED PwmOut Redled(p24); //globals int selectedOption = 0; int buttonPressed = 0; //boundary conditions - screen int cells[84][48]; void check() { lcd.clear(); Measurement measurement; // measurement structure declared in BMP180 class // 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); // 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 float temperature = measurement.temperature; // display on screen char buffer[14]; // each charact int length = sprintf(buffer,"T = %.2f 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,5); // display on screen float pressure = measurement.pressure; // same idea with floats if(temperature > 30.0 ) { lcd.printString("TEMP HIGH!",1,1); Redled=1.0; } else if(temperature < 3.0) { lcd.printString("TEMP LOW!",1,1); Redled= 1.0; } else { lcd.printString("TEMP OK!",1,1); Redled = 0.0; } wait(3); lcd.clear(); } //shows pressure reading and temperature void measurement() { lcd.clear(); 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 temperature() { lcd.clear(); 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); // } } void pressure() { lcd.clear(); 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 // float pressure = measurement.pressure; // same idea with floats int length = sprintf(buffer,"P = %.2f mb",pressure); if (length <= 14) lcd.printString(buffer,0,2); } } void altitude() // creating a new reading from the current ones, this appoximates the altitude in metres. { lcd.clear(); 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(); char buffer[14]; int temperature = measurement.temperature; float 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 m",altitude); int length = sprintf(buffer,"A = %.2f m",altitude); // print formatted data to buffer // it is important the format specifier ensures the length will fit in the buffer if (length <= 14) // if string wi lcd.printString(buffer,0,1); // display on screen } } //pushbutton - 0 //plots graph of temperature point by point void graph() { lcd.clear(); 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); // 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 graphScreen(){ lcd.clear(); lcd.printString("Hold button!",6,2);//select measure menu wait(1); lcd.clear(); selectedOption = 0; while(1) { lcd.drawRect(70,6,10,10,1); lcd.drawRect(70,21,10,10,0); lcd.drawRect(70,37,10,10,0);//check box 3 lcd.printString("line graph",1,1); lcd.printString("pie chart",1,3); lcd.printString("go back",1,5); lcd.printString(">",62,1); selectedOption = 1; if (pushbutton1) break; 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);//check box 3 lcd.printString("line graph",1,1); lcd.printString("pie chart",1,5); lcd.printString("go back",1,3); lcd.printString(">",62,3); selectedOption = 2; if (pushbutton1) break; 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);//check box 3 lcd.printString("line graph",1,1); lcd.printString("pie chart",1,3); lcd.printString("go back",1,5); lcd.printString(">",62,5); selectedOption = 3; if (pushbutton1) break; wait(2); lcd.clear(); } if(selectedOption == 1) { lcd.clear(); } if(selectedOption == 2) { graph(); } if(selectedOption == 3) { graph(); } } void measurementsScreen() { lcd.clear(); lcd.printString("Hold button!",6,2);//select measure menu wait(1); lcd.clear(); selectedOption = 0; while(1) { lcd.drawRect(70,6,10,10,1); lcd.drawRect(70,21,10,10,0); lcd.drawRect(70,37,10,10,0);//check box 3 lcd.printString("temperature",1,1); lcd.printString("altitude",1,3); lcd.printString("pressure",1,5); lcd.printString(">",62,1); selectedOption = 1; if (pushbutton1) break; 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);//check box 3 lcd.printString("temperature",1,1); lcd.printString("pressure",1,5); lcd.printString("altitude",1,3); lcd.printString(">",62,3); selectedOption = 2; if (pushbutton1) break; 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);//check box 3 lcd.printString("temperature",1,1); lcd.printString("altitude",1,3); lcd.printString("pressure",1,5); lcd.printString(">",62,5); selectedOption = 3; if (pushbutton1) break; wait(2); lcd.clear(); } if(selectedOption == 1) { pressure(); } if(selectedOption == 2) { temperature(); } if(selectedOption == 3) { altitude(); } } void introScreen() { lcd.printString("Welcome to",5,1); lcd.printString("Keiarash's",5,2); lcd.printString("Multi-Sensor",5,3); Redled= 1.0; } void extrasScreen() { lcd.clear(); lcd.printString("Hold Button!",6,2);//select measure menu wait(1); lcd.clear(); selectedOption = 0; while(1) { lcd.drawRect(70,6,10,10,1); lcd.drawRect(70,21,10,10,0); lcd.printString("check",1,1); lcd.printString(">",62,1); selectedOption = 1; if (pushbutton1) break; 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; if (pushbutton1) break; wait(2); lcd.clear(); } if(selectedOption == 1) { lcd.clear(); } if(selectedOption == 2) { check(); leds = 15; wait(0.5); leds = 0; } } void mainScreen() { lcd.clear(); lcd.printString("Hold Button!",6,2);//select measure menu wait(1); lcd.clear(); selectedOption = 0; while(1) {//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 //option titles-appropriate to check boxes lcd.printString("extras",1,1);//select measure menu lcd.printString("graph",1,3);//select settings menu lcd.printString("measure",1,5);//select grpah plot lcd.printString(">",62,1);//pointer selectedOption = 1; if (pushbutton1) break; 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("extras",1,1); lcd.printString("graph",1,3); lcd.printString("measure",1,5); lcd.printString(">",62,3); selectedOption = 2; if (pushbutton1) break; 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("extras",1,1); lcd.printString("graph",1,3); lcd.printString("measure",1,5); lcd.printString(">",62,5); selectedOption = 3; if (pushbutton1) break; wait(2); lcd.clear(); } if(selectedOption == 1) { measurementsScreen(); } if(selectedOption == 2) { extrasScreen(); } if(selectedOption == 3) { graphScreen(); } } //main loop int main() { pushbutton1.mode(PullUp);//initial value 0 // initiliase barometer bmp180.init(); lcd.init(); introScreen(); wait(3); Redled =0; lcd.clear(); mainScreen(); while(1) { lcd.printString("main menu...",1,2); wait(1); mainScreen(); } }