Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
amiraseman
Date:
Wed Apr 08 14:11:09 2015 +0000
Revision:
0:d78ac68077c6
Child:
1:e60b9f116d38
Initial work with temperature and pressure being displayed on the LCD with the RTC working. 8/4/2015 3:10 PM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amiraseman 0:d78ac68077c6 1 #include "mbed.h"
amiraseman 0:d78ac68077c6 2 #include "N5110.h"
amiraseman 0:d78ac68077c6 3 #include "BMP180.h"
amiraseman 0:d78ac68077c6 4 #include "PowerControl/PowerControl.h"
amiraseman 0:d78ac68077c6 5 #include "PowerControl/EthernetPowerControl.h"
amiraseman 0:d78ac68077c6 6
amiraseman 0:d78ac68077c6 7 BMP180 bmp180(p28,p27); // SDA, SCL
amiraseman 0:d78ac68077c6 8 N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
amiraseman 0:d78ac68077c6 9 Serial serial(USBTX,USBRX);
amiraseman 0:d78ac68077c6 10
amiraseman 0:d78ac68077c6 11 Ticker timer; //Create ticker object for temperature and pressure readings
amiraseman 0:d78ac68077c6 12 Ticker timer1; //Create ticker object for real time clock
amiraseman 0:d78ac68077c6 13
amiraseman 0:d78ac68077c6 14
amiraseman 0:d78ac68077c6 15
amiraseman 0:d78ac68077c6 16 void serialISR(); // ISR that is called when serial data is received
amiraseman 0:d78ac68077c6 17 void setTime(); // function to set the UNIX time
amiraseman 0:d78ac68077c6 18
amiraseman 0:d78ac68077c6 19 int setTimeFlag = 0; // flag for real time clock ISR
amiraseman 0:d78ac68077c6 20 int timerFlag = 0; // Flag for tempesrature pressure reading ISR
amiraseman 0:d78ac68077c6 21 int length;
amiraseman 0:d78ac68077c6 22
amiraseman 0:d78ac68077c6 23 char bufferTime[14]; // buffer to store time
amiraseman 0:d78ac68077c6 24 char bufferDate[14]; //buffer to store date
amiraseman 0:d78ac68077c6 25 char bufferT[14];
amiraseman 0:d78ac68077c6 26 char bufferP[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
amiraseman 0:d78ac68077c6 27 // so can display a string of a maximum 14 characters in length
amiraseman 0:d78ac68077c6 28 // or create formatted strings - ensure they aren't more than 14 characters long
amiraseman 0:d78ac68077c6 29
amiraseman 0:d78ac68077c6 30
amiraseman 0:d78ac68077c6 31
amiraseman 0:d78ac68077c6 32
amiraseman 0:d78ac68077c6 33
amiraseman 0:d78ac68077c6 34 void timer1Expired()
amiraseman 0:d78ac68077c6 35 {
amiraseman 0:d78ac68077c6 36 // set flagb
amiraseman 0:d78ac68077c6 37 setTimeFlag = 1;
amiraseman 0:d78ac68077c6 38 }
amiraseman 0:d78ac68077c6 39
amiraseman 0:d78ac68077c6 40
amiraseman 0:d78ac68077c6 41
amiraseman 0:d78ac68077c6 42
amiraseman 0:d78ac68077c6 43 void setTime() // sets the time every second
amiraseman 0:d78ac68077c6 44 {
amiraseman 0:d78ac68077c6 45
amiraseman 0:d78ac68077c6 46 if (setTimeFlag) {
amiraseman 0:d78ac68077c6 47 setTimeFlag=0;
amiraseman 0:d78ac68077c6 48 time_t seconds = time(NULL); // get current time
amiraseman 0:d78ac68077c6 49 // format time into a string (time and date)
amiraseman 0:d78ac68077c6 50 strftime(bufferTime, 14 , "%X", localtime(&seconds));
amiraseman 0:d78ac68077c6 51 strftime(bufferDate, 14 , "%d/%m/%y", localtime(&seconds));
amiraseman 0:d78ac68077c6 52 }
amiraseman 0:d78ac68077c6 53 }
amiraseman 0:d78ac68077c6 54
amiraseman 0:d78ac68077c6 55
amiraseman 0:d78ac68077c6 56
amiraseman 0:d78ac68077c6 57
amiraseman 0:d78ac68077c6 58 void timerExpired()
amiraseman 0:d78ac68077c6 59 {
amiraseman 0:d78ac68077c6 60 timerFlag=1;
amiraseman 0:d78ac68077c6 61 }
amiraseman 0:d78ac68077c6 62
amiraseman 0:d78ac68077c6 63
amiraseman 0:d78ac68077c6 64
amiraseman 0:d78ac68077c6 65 void readData()
amiraseman 0:d78ac68077c6 66 {
amiraseman 0:d78ac68077c6 67
amiraseman 0:d78ac68077c6 68 Measurement measurement; // measurement structure declared in BMP180 class
amiraseman 0:d78ac68077c6 69
amiraseman 0:d78ac68077c6 70 // read values (T in Celsius and P in mb) and print over serial port
amiraseman 0:d78ac68077c6 71 measurement = bmp180.readValues();
amiraseman 0:d78ac68077c6 72 // serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
amiraseman 0:d78ac68077c6 73
amiraseman 0:d78ac68077c6 74 int temperature = measurement.temperature;
amiraseman 0:d78ac68077c6 75 length = sprintf(bufferT,"T = %0.1d C",temperature); // print formatted data to buffer
amiraseman 0:d78ac68077c6 76 // it is important the format specifier ensures the length will fit in the buffer
amiraseman 0:d78ac68077c6 77
amiraseman 0:d78ac68077c6 78 float pressure = measurement.pressure; // same idea with floats
amiraseman 0:d78ac68077c6 79 length = sprintf(bufferP,"P = %.2f mb",pressure);
amiraseman 0:d78ac68077c6 80
amiraseman 0:d78ac68077c6 81
amiraseman 0:d78ac68077c6 82 }
amiraseman 0:d78ac68077c6 83
amiraseman 0:d78ac68077c6 84
amiraseman 0:d78ac68077c6 85 void displayData()
amiraseman 0:d78ac68077c6 86 {
amiraseman 0:d78ac68077c6 87 if (length <= 14) { // if string will fit on display
amiraseman 0:d78ac68077c6 88 lcd.printString(bufferT,0,1); // display on screen
amiraseman 0:d78ac68077c6 89 lcd.printString(bufferP,0,2);
amiraseman 0:d78ac68077c6 90 lcd.printString(bufferTime,0,3);
amiraseman 0:d78ac68077c6 91 lcd.printString(bufferDate,0,4);
amiraseman 0:d78ac68077c6 92 }
amiraseman 0:d78ac68077c6 93 }
amiraseman 0:d78ac68077c6 94
amiraseman 0:d78ac68077c6 95
amiraseman 0:d78ac68077c6 96 void updateData()
amiraseman 0:d78ac68077c6 97 {
amiraseman 0:d78ac68077c6 98 if (timerFlag) {
amiraseman 0:d78ac68077c6 99 timerFlag=0;
amiraseman 0:d78ac68077c6 100 readData();
amiraseman 0:d78ac68077c6 101 displayData();
amiraseman 0:d78ac68077c6 102 }
amiraseman 0:d78ac68077c6 103 Sleep();
amiraseman 0:d78ac68077c6 104 }
amiraseman 0:d78ac68077c6 105
amiraseman 0:d78ac68077c6 106
amiraseman 0:d78ac68077c6 107 int main()
amiraseman 0:d78ac68077c6 108 {
amiraseman 0:d78ac68077c6 109
amiraseman 0:d78ac68077c6 110 // initiliase barometer
amiraseman 0:d78ac68077c6 111 bmp180.init();
amiraseman 0:d78ac68077c6 112 lcd.init();
amiraseman 0:d78ac68077c6 113 timer.attach(&timerExpired,1.0);
amiraseman 0:d78ac68077c6 114 timer1.attach(&timer1Expired,1.0);
amiraseman 0:d78ac68077c6 115 set_time(0); // initialise time to 1st January 1970///// This is where we should set our time
amiraseman 0:d78ac68077c6 116
amiraseman 0:d78ac68077c6 117 while(1) {
amiraseman 0:d78ac68077c6 118 setTime();
amiraseman 0:d78ac68077c6 119 updateData();
amiraseman 0:d78ac68077c6 120 }
amiraseman 0:d78ac68077c6 121 }
amiraseman 0:d78ac68077c6 122
amiraseman 0:d78ac68077c6 123
amiraseman 0:d78ac68077c6 124