Project-D Weather Station To measure temperature and pressure
Dependencies: BMP180 N5110 mbed
main.cpp@0:d147c974627d, 2015-05-07 (annotated)
- Committer:
- afreshmeat
- Date:
- Thu May 07 15:51:42 2015 +0000
- Revision:
- 0:d147c974627d
The first version of my project
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
afreshmeat | 0:d147c974627d | 1 | /** |
afreshmeat | 0:d147c974627d | 2 | @Header file name.h |
afreshmeat | 0:d147c974627d | 3 | @Project-D Weather Station |
afreshmeat | 0:d147c974627d | 4 | @file main.cpp |
afreshmeat | 0:d147c974627d | 5 | @author Li XingYu |
afreshmeat | 0:d147c974627d | 6 | @date May 2015 |
afreshmeat | 0:d147c974627d | 7 | */ |
afreshmeat | 0:d147c974627d | 8 | |
afreshmeat | 0:d147c974627d | 9 | #include "mbed.h" |
afreshmeat | 0:d147c974627d | 10 | #include "N5110.h" |
afreshmeat | 0:d147c974627d | 11 | #include "BMP180.h" |
afreshmeat | 0:d147c974627d | 12 | |
afreshmeat | 0:d147c974627d | 13 | /** |
afreshmeat | 0:d147c974627d | 14 | @namespace lcd,bmp180,serial |
afreshmeat | 0:d147c974627d | 15 | @brief serial connects to micro-controller |
afreshmeat | 0:d147c974627d | 16 | @brief |
afreshmeat | 0:d147c974627d | 17 | */ |
afreshmeat | 0:d147c974627d | 18 | |
afreshmeat | 0:d147c974627d | 19 | //The pins of N5110, BMP180 which are connected to micro-controller |
afreshmeat | 0:d147c974627d | 20 | N5110 lcd(p7,p8,p9,p10,p11,p13,p22); |
afreshmeat | 0:d147c974627d | 21 | BMP180 bmp180(p28,p27); |
afreshmeat | 0:d147c974627d | 22 | Serial serial(USBTX,USBRX);// The tool which sets the date |
afreshmeat | 0:d147c974627d | 23 | |
afreshmeat | 0:d147c974627d | 24 | /** |
afreshmeat | 0:d147c974627d | 25 | add up one integer variable |
afreshmeat | 0:d147c974627d | 26 | @param setTimerFlag - integer to add |
afreshmeat | 0:d147c974627d | 27 | creat two functions |
afreshmeat | 0:d147c974627d | 28 | @param serialISR - function to add |
afreshmeat | 0:d147c974627d | 29 | @param setTime - function to add |
afreshmeat | 0:d147c974627d | 30 | */ |
afreshmeat | 0:d147c974627d | 31 | void serialISR();// ISR that is called when serial data is received |
afreshmeat | 0:d147c974627d | 32 | void setTime();// function to set the UNIX time |
afreshmeat | 0:d147c974627d | 33 | int setTimerFlag = 0;// flag for ISR |
afreshmeat | 0:d147c974627d | 34 | |
afreshmeat | 0:d147c974627d | 35 | char rxString[16];// buffer to store received string |
afreshmeat | 0:d147c974627d | 36 | |
afreshmeat | 0:d147c974627d | 37 | |
afreshmeat | 0:d147c974627d | 38 | /** |
afreshmeat | 0:d147c974627d | 39 | @Boot Screen |
afreshmeat | 0:d147c974627d | 40 | Sset Brightness |
afreshmeat | 0:d147c974627d | 41 | @Set date |
afreshmeat | 0:d147c974627d | 42 | @Connect LCD and sensor to micro-controller |
afreshmeat | 0:d147c974627d | 43 | @Display temperature and pressure |
afreshmeat | 0:d147c974627d | 44 | */ |
afreshmeat | 0:d147c974627d | 45 | |
afreshmeat | 0:d147c974627d | 46 | int main() |
afreshmeat | 0:d147c974627d | 47 | { |
afreshmeat | 0:d147c974627d | 48 | |
afreshmeat | 0:d147c974627d | 49 | lcd.init(); |
afreshmeat | 0:d147c974627d | 50 | //Boot Screen |
afreshmeat | 0:d147c974627d | 51 | lcd.printString("Project-D",2,1);//First line and coordinate |
afreshmeat | 0:d147c974627d | 52 | lcd.printString("Weather",2,2);//Second line and coordinate |
afreshmeat | 0:d147c974627d | 53 | lcd.printString("station",2,3);//Third line and coordinate |
afreshmeat | 0:d147c974627d | 54 | wait(2.0);//Wait 2 secs and turn into next interface |
afreshmeat | 0:d147c974627d | 55 | lcd.clear();//Clear |
afreshmeat | 0:d147c974627d | 56 | lcd.setBrightness(0.1);//Screen Brightness |
afreshmeat | 0:d147c974627d | 57 | bmp180.init(); |
afreshmeat | 0:d147c974627d | 58 | Measurement measurement; |
afreshmeat | 0:d147c974627d | 59 | //RTC |
afreshmeat | 0:d147c974627d | 60 | serial.attach(&serialISR);//Set the time |
afreshmeat | 0:d147c974627d | 61 | char t[30];//array to t |
afreshmeat | 0:d147c974627d | 62 | while(1) { |
afreshmeat | 0:d147c974627d | 63 | time_t seconds = time(NULL); |
afreshmeat | 0:d147c974627d | 64 | |
afreshmeat | 0:d147c974627d | 65 | strftime(t, 30 , "%X %D",localtime(&seconds));//The form of date |
afreshmeat | 0:d147c974627d | 66 | |
afreshmeat | 0:d147c974627d | 67 | serial.printf("Time = %s\n" ,t);// The form of date displaying on the screen |
afreshmeat | 0:d147c974627d | 68 | lcd.printString(t,0,5);//The coordinate of date |
afreshmeat | 0:d147c974627d | 69 | wait(1.0); |
afreshmeat | 0:d147c974627d | 70 | if(setTimerFlag) // if updated time has been sent |
afreshmeat | 0:d147c974627d | 71 | { |
afreshmeat | 0:d147c974627d | 72 | setTimerFlag = 0;// clear flag |
afreshmeat | 0:d147c974627d | 73 | setTime(); // update time |
afreshmeat | 0:d147c974627d | 74 | |
afreshmeat | 0:d147c974627d | 75 | } |
afreshmeat | 0:d147c974627d | 76 | |
afreshmeat | 0:d147c974627d | 77 | |
afreshmeat | 0:d147c974627d | 78 | measurement = bmp180.readValues();// The values received by BMP180 |
afreshmeat | 0:d147c974627d | 79 | char buffer[14];//array for buffer |
afreshmeat | 0:d147c974627d | 80 | int length = sprintf(buffer,"T= %.2f C",measurement.temperature);//Thr form of values of temperature |
afreshmeat | 0:d147c974627d | 81 | if(length<=14)//If less than 14 words a line |
afreshmeat | 0:d147c974627d | 82 | lcd.printString(buffer,0,1); // The coordinate of date |
afreshmeat | 0:d147c974627d | 83 | char buffer2[14];//14 words a line |
afreshmeat | 0:d147c974627d | 84 | length =sprintf(buffer2,"P = %.2f mb",measurement.pressure);//The form of values of pressure |
afreshmeat | 0:d147c974627d | 85 | if(length<=14)//If less than 14 words a line |
afreshmeat | 0:d147c974627d | 86 | lcd.printString(buffer2,0,2); //The coordinate of values |
afreshmeat | 0:d147c974627d | 87 | wait(1.0);//wait 1 sec |
afreshmeat | 0:d147c974627d | 88 | } |
afreshmeat | 0:d147c974627d | 89 | |
afreshmeat | 0:d147c974627d | 90 | |
afreshmeat | 0:d147c974627d | 91 | |
afreshmeat | 0:d147c974627d | 92 | } |
afreshmeat | 0:d147c974627d | 93 | |
afreshmeat | 0:d147c974627d | 94 | /** |
afreshmeat | 0:d147c974627d | 95 | add up one integer variable |
afreshmeat | 0:d147c974627d | 96 | @setTime - print it for debugging |
afreshmeat | 0:d147c974627d | 97 | @timeflag - read rx string into buffer |
afreshmeat | 0:d147c974627d | 98 | @param time - integer to add |
afreshmeat | 0:d147c974627d | 99 | @atoi - update the time |
afreshmeat | 0:d147c974627d | 100 | */ |
afreshmeat | 0:d147c974627d | 101 | |
afreshmeat | 0:d147c974627d | 102 | void setTime()// print time for debugging |
afreshmeat | 0:d147c974627d | 103 | { |
afreshmeat | 0:d147c974627d | 104 | serial.printf("set_time - %s",rxString);// atoi() converts a string to an integer |
afreshmeat | 0:d147c974627d | 105 | |
afreshmeat | 0:d147c974627d | 106 | int time = atoi(rxString);// update the time |
afreshmeat | 0:d147c974627d | 107 | |
afreshmeat | 0:d147c974627d | 108 | set_time(time); |
afreshmeat | 0:d147c974627d | 109 | } |
afreshmeat | 0:d147c974627d | 110 | |
afreshmeat | 0:d147c974627d | 111 | void serialISR() |
afreshmeat | 0:d147c974627d | 112 | { |
afreshmeat | 0:d147c974627d | 113 | // when a serial interrupt occurs, read rx string into buffer |
afreshmeat | 0:d147c974627d | 114 | serial.gets(rxString,16); |
afreshmeat | 0:d147c974627d | 115 | // set flag |
afreshmeat | 0:d147c974627d | 116 | setTimerFlag = 1; |
afreshmeat | 0:d147c974627d | 117 | } |
afreshmeat | 0:d147c974627d | 118 | |
afreshmeat | 0:d147c974627d | 119 | |
afreshmeat | 0:d147c974627d | 120 | |
afreshmeat | 0:d147c974627d | 121 | |
afreshmeat | 0:d147c974627d | 122 | |
afreshmeat | 0:d147c974627d | 123 | |
afreshmeat | 0:d147c974627d | 124 | |
afreshmeat | 0:d147c974627d | 125 |