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